{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "e9739740",
   "metadata": {},
   "source": [
    "Copyright 2021 The TensorFlow Similarity Authors."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "2dc52802",
   "metadata": {},
   "outputs": [],
   "source": [
    "# @title Licensed under the Apache License, Version 2.0 (the \"License\");\n",
    "# you may not use this file except in compliance with the License.\n",
    "# You may obtain a copy of the License at\n",
    "#\n",
    "# https://www.apache.org/licenses/LICENSE-2.0\n",
    "#\n",
    "# Unless required by applicable law or agreed to in writing, software\n",
    "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
    "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
    "# See the License for the specific language governing permissions and\n",
    "# limitations under the License."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0f8bb11c",
   "metadata": {},
   "source": [
    "# Tensorflow Similarity Sampler I/O Cookbook"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fc449167",
   "metadata": {},
   "source": [
    "<table class=\"tfo-notebook-buttons\" align=\"left\">\n",
    "  <td>\n",
    "    <a target=\"_blank\" href=\"https://colab.research.google.com/github/tensorflow/similarity/blob/master/examples/sampler_io_cookbook.ipynb\"><img src=\"https://www.tensorflow.org/images/colab_logo_32px.png\" />Run in Google Colab</a>\n",
    "  </td>\n",
    "  <td>\n",
    "    <a target=\"_blank\" href=\"https://github.com/tensorflow/similarity/blob/master/examples/sampler_io_cookbook.ipynb\"><img src=\"https://www.tensorflow.org/images/GitHub-Mark-32px.png\" />View source on GitHub</a>\n",
    "  </td>\n",
    "</table>"
   ]
  },
  {
   "attachments": {
    "contrastive_batch.png": {
     "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm8AAADpCAYAAAByQNBkAAAAAXNSR0IArs4c6QAAIABJREFUeF7t\nnQmUFcX1hy8om6gBBUFQI2I0Ji6BAC4hgAuCLAIuoIJEgxGDRtzYRFEQRFTiGlBcMIoIIsgqDgoI\nguCGGDYBWURxQRCMC5Ft/uervz3nzfPNdL+ZeW+63/vVOR51urv61lf1un99762qMrm5ubmmIgIi\nIAIiIAIiIAIiEAkCZSTeItFPMlIEREAEREAEREAEHAGJNw0EERABERABERABEYgQAYm3CHWWTBUB\nERABERABERABiTeNAREQAREQAREQARGIEAGJtwh1lkwVAREQAREQAREQAYk3jQEREAEREAEREAER\niBABibcIdZZMFQEREAEREAEREAGJN40BERABERABERABEYgQAYm3CHWWTBUBERABERABERABiTeN\nAREQAREQAREQARGIEAGJtwh1lkwVAREQAREQAREQAYk3jQEREAEREAEREAERiBABibcIdZZMFQER\nEAEREAEREAGJN40BERABERABERABEYgQAYm3CHWWTBUBERABERABERABiTeNAREQAREQAREQARGI\nEAGJtwh1lkwVAREQAREQAREQAYk3jQEREAEREAEREAERiBABibcIdZZMFQEREAEREAEREAGJN40B\nERABERABERABEYgQAYm3CHWWTBUBERABERABERABiTeNAREQAREQAREQARGIEAGJtwh1lkwVAREQ\nAREQAREQgSKLt9zcXJs1a5YIioAIiIAI/EygefPmVrZsWfEQAREQgZQSKLJ4y8nJsWXLltmxxx6b\nUgNVuQiIgAhEgcDHH39sJ554orVs2TIK5spGERCBCBMolnjbuXOnNW3aNMLNl+kiIAIiUDIE5s+f\nbxUqVJB4KxmcqkUERKAQAhJvGh4iIAIiUAIEJN5KAKKqEAERCERA4i0QJp0kAiIgAoUTkHjTCBEB\nEUgXAYm3dJHWfURABDKagMRbRnevGicCoSIg8Raq7pAxIiACUSUg8RbVnpPdIhA9AhJv0eszWSwC\nIhBCAhJvIewUmSQCGUpA4i1DO1bNEgERSC8Bibf08tbdRCCbCUi8ZXPvq+0iIAIlRkDircRQqiIR\nEAEfAmkTb+zI8M0339iiRYtsxYoVVqtWLTv33HOtRo0aeSauWrXK1q9fb61btw5Fx2HPypUrrXHj\nxvnsDIVxMkIERCBUBCTeQtUdMkYEMppAWsTb7t277ZprrrEpU6ZYxYoVrU6dOoYwYkHLRx55xC64\n4AIH+f7777cnn3zSPvroo1KHjths3769LVy40P7+97/bXXfdVeo2yQAREIHwEpB4C2/fyDIRyDQC\nKRdve/fudcLttddesyeeeMKaNGniRNuWLVusX79+NnfuXCeQDj/88FCJt40bN1qDBg3sL3/5ixOd\ny5cvd8JTRQREQAQSEQiLeBs/frz98Y9/1NaFJThMvSjMhRdeWOxacQyUKVMmUD04MohUlcR9uSH3\nfuutt+zHH3+00047zQ466KBAduik8BFIuXibMGGCE28IN8/D5mEgjHrGGWe4v999990JxduuXbuc\ncFq3bp0baOwdeMQRR+SRZDBynB/XIYccYn/4wx+sWrVqgY8X1CXY88ILL9js2bPdPR9++GG75JJL\nwteDskgERCAUBMIg3ngeli9f3kU0eO6qlAyBe++914YNG2bbtm0rVoX/+c9/rGfPns5pEaQQjRoy\nZIht3749yOmFnjN9+nQXRfrpp5/cef/73/9s4sSJ1rx582LXrQrSTyDl4q1Xr172+uuv2wcffJCw\ndYgzHjaU+LApGz1feeWVTrj95je/sTVr1rgvhwceeMAuvfRS99/XX3+9jRs3zo4//njnzWNAjhgx\nwtq0aeN7vCDceAsRgW3btnU/nI4dO9p///tfy8nJSX8P6Y4iIAKRICDxFoluKpKRJSXehg8f7t4p\nOC6ClJISb7xnTzjhBGvRooU99NBD7t3Yo0cPw0v79ddfK6oUpDNCdk5KxRsD5Oyzz7bDDjvMCSy/\nEiveuLZbt27Gl8qbb75plSpVsu+//965jxn47777rsuN+9Of/mSTJ0+2P//5z7Zv3z674oor7JNP\nPrF58+b5Hi/Injlz5tjFF1/s6sDrNmnSJPvb3/5mb7zxhp100kl+zdBxERCBLCSQbvHGc+6dd95x\nIdJjjjnGES/I8+aF/fgw/d3vfueea7Hlu+++c883PlJ/+9vfWv369fOF9j799FM32Wz//fe3k08+\nOWFI9sMPP8ybjHbqqae6Z3Zs4fiyZctcZASbq1evHniU/PDDD+7ahg0bun/zIc9EMia+xRe8VG+/\n/bZrC/epW7du3imff/65e38QvSGq0qhRIzvyyCN97fDE21dffeXeR3jgCDvGRoG8Sgpizb3vuece\n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\nCGQDAYm3bOhltVEEwkEgbeLNay5bT23+dLPVrF3T7bQQpHz5+VdWpeqv3HIhBZX/fvudMcEhdoHe\n2HP9jhdUb1HsDdImnSMCIpBZBCTeMqs/1RoRCDOBtIu3MMOQbSIgAiJQVAISb0Ulp+tEQASSJSDx\nliwxnS8CIiACCQhIvGlYiIAIpIuAxFu6SOs+IiACGU1A4i2ju1eNE4FQEZB4C1V3yBgREIGoEpB4\ni2rPyW4RiB4Bibfo9ZksFgERCCEBibcQdopMEoEMJSDxlqEdq2aJgAikl4DEW3p5624ikM0EJN6y\nuffVdhEQgRIjIPFWYihVkQiIgA+BYom3pSveszrH1xFkERABEch6AhvWbLSTf1vPzjvvvKxnIQAi\nIAKpJVBk8bZz506bPn2alSuXf7P51Jqr2kVABEQgnARYJLx16zZ2wAEHhNNAWSUCIpAxBIos3jKG\ngBoiAiIgAiIgAiIgAhEiIPEWoc6SqSIgAiIgAiIgAiIg8aYxIAIiIAIiIAIiIAIRIiDxFqHOkqki\nIAIiIAIiIAIiIPGmMSACIiACIiACIiACESIg8RahzpKpIiACIiACIiACIiDxpjEgAiIgAiIgAiIg\nAhEiIPEWoc6SqSIgAiIgAiIgAiIg8aYxIAIiIAIiIAIiIAIRIiDxFqHOkqkiIAIiIAIiIAIiIPGm\nMSACIiACIiACIiACESIg8RahzpKpIiACIiACIiACIiDxpjEgAiIgAiIgAiIgAhEiIPEWoc6SqSIg\nAiIgAiIgAiIg8aYxIAIiIAIiIAIiIAIRIiDxFqHOkqkiIAIiIAIiIAIiIPGmMSACIiACIiACIiAC\nESIg8RahzpKpIiACIiACIiACIiDxpjEgAiIgAiIgAiIgAhEiIPEWoc6SqSIgAiIgAiIgAiIg8aYx\nIAIiIAIiIAIiIAIRIiDxFqHOkqkiIAIiIAIiIAIiIPGmMSACIiACIiACIiACESIg8RahzpKpIiAC\nIiACIiACIiDxpjEgAiIgAiIgAiIgAhEiIPEWoc6SqSIgAiIgAiIgAiIg8aYxIAIiIAIiIAIiIAIR\nIvB/fnWCNCjA35EAAAAASUVORK5CYII=\n"
    }
   },
   "cell_type": "markdown",
   "id": "382f7b45",
   "metadata": {},
   "source": [
    "Tensorflow Similarity's Samplers ensure that each batch contains a target number of examples per class per batch. This ensures that the loss functions are able to construct tuples of anchor, positive, and negatives within each batch of examples.\n",
    "\n",
    "![contrastive_batch.png](https://raw.githubusercontent.com/tensorflow/similarity/master/assets/images/contrastive_batch.png)\n",
    "\n",
    "In this notebook you will learn how to use the:\n",
    "\n",
    "* `MultiShotMemorySampler()` for fitting to a sequence of data, such as a dataset.\n",
    "* `SingleShotMemorySampler()` to treat each example as a seperate class and generate augmented versions within each batch.\n",
    "* `TFDatasetMultiShotMemorySampler()` to directly integrate with the Tensorflow dataset catalog. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73442fe4",
   "metadata": {},
   "source": [
    "## Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "495e645a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import random\n",
    "from typing import Tuple\n",
    "\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "# INFO messages are not printed.\n",
    "# This must be run before loading other modules.\n",
    "os.environ[\"TF_CPP_MIN_LOG_LEVEL\"] = \"1\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e168c87f-094b-42cd-b1b4-1b47b737c861",
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "6eb306c8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# install TF similarity if needed\n",
    "try:\n",
    "    import tensorflow_similarity as tfsim  # main package\n",
    "except ModuleNotFoundError:\n",
    "    !pip install tensorflow_similarity\n",
    "    import tensorflow_similarity as tfsim"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "28ea3fc6",
   "metadata": {},
   "outputs": [],
   "source": [
    "tfsim.utils.tf_cap_memory()  # Avoid GPU memory blow up"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b758af4b",
   "metadata": {},
   "source": [
    "<hr>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "81170e44",
   "metadata": {},
   "source": [
    "# MultiShotMemorySampler: Load Random Numpy Arrays\n",
    "The following cell loads random numpy data using TensorFlow similarity`MultiShotMemorySampler()`.\n",
    "\n",
    "Using a sampler is required to ensure that each batch contains at least N samples for each class included in a batch. \n",
    "\n",
    "This batch strucutre is required for the contrastive loss to properly compute positive pairwise distances."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "9dfb57a7",
   "metadata": {},
   "outputs": [],
   "source": [
    "num_ms_examples = 100000  # @param {type:\"slider\", min:1000, max:1000000}\n",
    "num_ms_features = 784  # @param {type:\"slider\", min:10, max:1000}\n",
    "num_ms_classes = 10  # @param {type:\"slider\", min:2, max:1000}\n",
    "\n",
    "# We use random floats here to represent a dense feature vector\n",
    "X_ms = np.random.rand(num_ms_examples, num_ms_features)\n",
    "# We use random ints to represent N different classes\n",
    "y_ms = np.random.randint(low=0, high=10, size=num_ms_examples)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f89257be",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "The initial batch size is 10 (5 classes * 2 examples per class) with 0 augmentations\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "2d6f394e62db491bb24e6bafa52f2be4",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "filtering examples:   0%|          | 0/100000 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "79164124cfb84002b491b99ef21085a4",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "selecting classes:   0%|          | 0/5 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7006bae02ee244e09212453c18ebd2c7",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "gather examples:   0%|          | 0/50177 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "018bfc1d4c92407c8fabceb725cb267f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "indexing classes:   0%|          | 0/50177 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_known_ms_classes = 5  # @param {type:\"slider\", min:2, max:1000}\n",
    "ms_classes_per_batch = num_known_ms_classes\n",
    "ms_examples_per_class_per_batch = 2  # @param {type:\"integer\"}\n",
    "ms_class_list = random.sample(range(num_ms_classes), k=num_known_ms_classes)\n",
    "\n",
    "ms_sampler = tfsim.samplers.MultiShotMemorySampler(\n",
    "    X_ms,\n",
    "    y_ms,\n",
    "    classes_per_batch=ms_classes_per_batch,\n",
    "    examples_per_class_per_batch=ms_examples_per_class_per_batch,\n",
    "    class_list=ms_class_list,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b47ab3c",
   "metadata": {},
   "source": [
    "## Generating Batches\n",
    "The Tensorflow Similarity memory samplers are a subclass of [tf.keras.utils.Sequence](https://www.tensorflow.org/api_docs/python/tf/keras/utils/Sequence), overriding the `__getitem__` and `__len__` methods. \n",
    "\n",
    "Additionally, Tensorflow Similarity provides a `generate_batch()` method that takes a batch ID and yields a single batch. \n",
    "\n",
    "We verify that the batch batch only conatins the classes defined in `CLASS_LIST` and that each class has `ms_classes_per_batch` * `ms_examples_per_class_per_batch` examples. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "761c0ca3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "########## X ##########\n",
      "tf.Tensor(\n",
      "[[0.39406586 0.51118152 0.29467532 ... 0.60810397 0.14654475 0.35017083]\n",
      " [0.66045026 0.04942768 0.20772893 ... 0.68151692 0.97224193 0.27135958]\n",
      " [0.30585765 0.93442261 0.66612303 ... 0.98020155 0.34858715 0.66099411]\n",
      " ...\n",
      " [0.20376211 0.36431798 0.52496214 ... 0.48245533 0.61249901 0.83424101]\n",
      " [0.80136881 0.04516244 0.31054512 ... 0.94568659 0.80773981 0.34773784]\n",
      " [0.25677509 0.86741612 0.58229815 ... 0.17823706 0.71602364 0.79509467]], shape=(10, 784), dtype=float64)\n",
      "\n",
      "########## y ##########\n",
      "tf.Tensor([2 2 9 9 5 5 1 1 6 6], shape=(10,), dtype=int64)\n"
     ]
    }
   ],
   "source": [
    "X_ms_batch, y_ms_batch = ms_sampler.generate_batch(100)\n",
    "print(\"#\" * 10 + \" X \" + \"#\" * 10)\n",
    "print(X_ms_batch)\n",
    "print(\"\\n\" + \"#\" * 10 + \" y \" + \"#\" * 10)\n",
    "print(y_ms_batch)\n",
    "\n",
    "# Check that the batch size is equal to the target number of classes * target number of examples per class.\n",
    "assert tf.shape(X_ms_batch)[0] == (ms_classes_per_batch * ms_examples_per_class_per_batch)\n",
    "# Check that the number of columns matches the number of expected features.\n",
    "assert tf.shape(X_ms_batch)[1] == (num_ms_features)\n",
    "# Check that classes in the batch are from the allowed set in CLASS_LIST\n",
    "assert set(tf.unique(y_ms_batch)[0].numpy()) - set(ms_class_list) == set()\n",
    "# Check that we only have NUM_CLASSES_PER_BATCH\n",
    "assert len(tf.unique(y_ms_batch)[0]) == ms_classes_per_batch"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1b61c162",
   "metadata": {},
   "source": [
    "## Sampler Sizes\n",
    "\n",
    "`MultiShotMemorySampler()` provides various attributes for accessing info about the data:\n",
    "* `__len__` provides the number of steps per epoch. \n",
    "* `num_examples` provides the total number of examples within the sampler.\n",
    "* `example_shape` provides the shape of the examples.\n",
    "\n",
    "The `num_examples` attribute represents the subset of X and y where y is in the `class_list` with each class limited to `num_examples_per_class`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "8da0a1b7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The sampler contains 1000 steps per epoch.\n",
      "The sampler is using 50177 examples out of the original 100000.\n",
      "Each examples has the following shape: (784,).\n"
     ]
    }
   ],
   "source": [
    "print(f\"The sampler contains {len(ms_sampler)} steps per epoch.\")\n",
    "print(f\"The sampler is using {ms_sampler.num_examples} examples out of the original {num_ms_examples}.\")\n",
    "print(f\"Each examples has the following shape: {ms_sampler.example_shape}.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e1d40e2",
   "metadata": {},
   "source": [
    "## Accessing the Examples\n",
    "\n",
    "Additionaly, the `MultiShotMemorySampler()` provides `get_slice()` for manually accessing examples within the Sampler.\n",
    "\n",
    "**NOTE**: the examples are shuffled when creating the Sampler but will yield the same examples for each call to get_slice(begin, size)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "7f3a12e5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "########## X ##########\n",
      "tf.Tensor(\n",
      "[[0.80055117 0.50793652 0.347851   ... 0.08759055 0.5526287  0.56406995]\n",
      " [0.61682049 0.35124358 0.00192724 ... 0.58012527 0.8942675  0.67723779]\n",
      " [0.37159481 0.13457643 0.88745331 ... 0.15877883 0.1529499  0.20259003]\n",
      " ...\n",
      " [0.43772738 0.61633454 0.30040795 ... 0.28213791 0.98213814 0.05223573]\n",
      " [0.80244223 0.07866318 0.60588217 ... 0.9188973  0.16102294 0.53188368]\n",
      " [0.61988293 0.33331014 0.24551832 ... 0.64614327 0.74577407 0.25459096]], shape=(10, 784), dtype=float64)\n",
      "\n",
      "########## y ##########\n",
      "tf.Tensor([6 5 2 6 5 5 1 1 6 9], shape=(10,), dtype=int64)\n"
     ]
    }
   ],
   "source": [
    "# Get 10 examples starting at example 200.\n",
    "X_ms_slice, y_ms_slice = ms_sampler.get_slice(begin=200, size=10)\n",
    "print(\"#\" * 10 + \" X \" + \"#\" * 10)\n",
    "print(X_ms_slice)\n",
    "print(\"\\n\" + \"#\" * 10 + \" y \" + \"#\" * 10)\n",
    "print(y_ms_slice)\n",
    "\n",
    "# Check that the batch size is equal to our get_slice size.\n",
    "assert tf.shape(X_ms_slice)[0] == 10\n",
    "# Check that the number of columns matches the number of expected features.\n",
    "assert tf.shape(X_ms_slice)[1] == (num_ms_features)\n",
    "# Check that classes in the batch are from the allowed set in CLASS_LIST\n",
    "assert set(tf.unique(y_ms_slice)[0].numpy()) - set(ms_class_list) == set()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b67e244",
   "metadata": {},
   "source": [
    "<hr>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ed22d48",
   "metadata": {},
   "source": [
    "# SingleShotMemorySampler: Augmented MNIST Examples\n",
    "\n",
    "The following cell loads and augments MNIST examples using the `SingleShotMemorySampler()`.\n",
    "\n",
    "The Sampler treats each example as it's own class and adds augmented versions of each image to the batch.\n",
    "\n",
    "This means the final batch size is the number of `examples per batch * (1 + the number of augmentations)`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "ac5979f9",
   "metadata": {},
   "outputs": [],
   "source": [
    "(aug_x, _), _ = tf.keras.datasets.mnist.load_data()\n",
    "# Normalize the image data.\n",
    "aug_x = tf.cast(aug_x / 255.0, dtype=\"float32\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "1e40f64c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "The initial batch size is 18 (18 classes * 1 examples per class) with 1 augmentations\n"
     ]
    }
   ],
   "source": [
    "aug_num_examples_per_batch = 18  # @param {type:\"slider\", min:18, max:512}\n",
    "aug_num_augmentations_per_example = 1  # @param {type:\"slider\", min:1, max:3}\n",
    "\n",
    "\n",
    "data_augmentation = tf.keras.Sequential(\n",
    "    [\n",
    "        tf.keras.layers.RandomRotation(0.12),\n",
    "    ]\n",
    ")\n",
    "\n",
    "\n",
    "def augmenter(\n",
    "    x: tfsim.types.FloatTensor, y: tfsim.types.IntTensor, examples_per_class: int, is_warmup: bool, stddev=0.025\n",
    ") -> Tuple[tfsim.types.FloatTensor, tfsim.types.IntTensor]:\n",
    "    \"\"\"Image augmentation function.\n",
    "\n",
    "    Args:\n",
    "        X: FloatTensor representing the example features.\n",
    "        y: IntTensor representing the class id. In this case\n",
    "           the example index will be used as the class id.\n",
    "        examples_per_class: The number of examples per class.\n",
    "           Not used here.\n",
    "        is_warmup: If True, the training is still in a warm\n",
    "           up state. Not used here.\n",
    "        stddev: Sets the amount of gaussian noise added to\n",
    "           the image.\n",
    "    \"\"\"\n",
    "    _ = examples_per_class\n",
    "    _ = is_warmup\n",
    "\n",
    "    aug = tf.squeeze(data_augmentation(tf.expand_dims(x, -1)))\n",
    "    aug = aug + tf.random.normal(tf.shape(aug), stddev=stddev)\n",
    "    x = tf.concat((x, aug), axis=0)\n",
    "    y = tf.concat((y, y), axis=0)\n",
    "    idxs = tf.range(start=0, limit=tf.shape(x)[0])\n",
    "    idxs = tf.random.shuffle(idxs)\n",
    "    x = tf.gather(x, idxs)\n",
    "    y = tf.gather(y, idxs)\n",
    "    return x, y\n",
    "\n",
    "\n",
    "aug_sampler = tfsim.samplers.SingleShotMemorySampler(\n",
    "    aug_x,\n",
    "    augmenter=augmenter,\n",
    "    examples_per_batch=aug_num_examples_per_batch,\n",
    "    num_augmentations_per_example=aug_num_augmentations_per_example,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "1a0e5bfd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA8cAAAPeCAYAAAAh1mgJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd5gV5fk38HvmbO+VLbCw9KYIoiI2iB1FYu8aSyyxt5+pmsSSGGPX2GsUe0ksxI6KiCiInd7LsizbeznzvH/kda/cRXZZKcvO93Nd/vE83mfOnLNznpnZ5f4ezznnCAAAAAAAACDE/O29AwAAAAAAAADbG26OAQAAAAAAIPRwcwwAAAAAAAChh5tjAAAAAAAACD3cHAMAAAAAAEDo4eYYAAAAAAAAQg83xwAAAAAAABB6uDkGAAAAAACA0MPNMQAAAAAAAIQebo4BAAAAAAAg9HrszXFdXR398Y9/pEMPPZSysrLI8zx6/PHHN/mY1tZWGjFiBHmeR7fccgv7f+vWraNTTz2Vhg4dSqmpqZSRkUF77LEHPfHEE+Sc2+R2DzroIPI8jy666KKf+rJgB4XjEbqTzz//nC666CIaOXIkJScnU9++fen444+nRYsWsbrPPvuMLrjgAho7dizFxsaS53k/us3q6mq6+uqrafDgwZSYmEj9+vWjs88+m1atWsXqiouLyfM887/BgwdvldcL3RuOR+jObrzxRvI8j3baaSc2HwQB3X///TR69GhKSUmhvLw8mjRpEn3yySfmdr744guaMmUKZWVlUVJSEu2000501113sZq//OUvtOeee1Jubi4lJCTQ4MGD6bLLLqOysrKt9vpgx4LjceuL2d47sLVs3LiRrrvuOurbty/tsssu9MEHH3T4mLvvvludOP93e2vWrKFjjz2W+vbtS62trfTOO+/QGWecQQsXLqS//OUv5uNefvllmjVr1k95KdAD4HiE7uRvf/sbzZw5k4477jgaNWoUrV+/nu655x7adddd6dNPP20/6U6bNo0efvhhGjVqFA0YMEDdrPwgCAI66KCD6Pvvv6cLLriAhgwZQkuWLKF7772X3nrrLZo/fz6lpqYSEdEdd9xBdXV17PErV66kP/zhD3TwwQdv3RcO3RKOR+iu1qxZQ3/5y18oOTlZ/b//+7//o9tuu41OPfVUuuCCC6iqqooeeOABmjBhAs2cOZP22GOP9tq3336bjjjiCBozZgxdc801lJKSQkuXLqU1a9awbc6dO5dGjx5NJ554IqWmptL8+fPpoYceojfeeIO+/PJLcz8gPHA8biOuh2pqanIlJSXOOec+//xzR0Tuscce+9H60tJSl56e7q677jpHRO7vf/97p55n8uTJLjk52bW1tan/19jY6IqLi9u3eeGFF3bptcCOD8cjdCczZ850zc3NbG7RokUuPj7enXLKKe1z69evdw0NDc455y688EL3Y6eMmTNnOiJy99xzD5t/9NFHHRG5l19+eZP7c/311zsicjNnzuzKy4EdHI5H6K5OOOEEt//++7sJEya4kSNHts+3tra6xMREd+yxx7L6ZcuWOSJyl1xySftcdXW1y8vLc0cddZSLRqObvQ8vvviiIyL3zDPPdP2FQI+A43Hb6LH/rDo+Pp7y8/M7Xf+b3/yGhg4dSqeeeupmPU9xcTE1NDRQS0uL+n8333wzBUFAV1111WZtE3oeHI/Qney1114UFxfH5gYPHkwjR46k+fPnt8/l5eVRYmJih9urqalpr/9fBQUFREQdbuPpp5+m/v3701577dWp/YeeBccjdEcfffQRvfjii3THHXeo/9fa2kqNjY3qGOvVqxf5vs+OsaeffppKS0vpxhtvJN/3qb6+noIg6PR+FBcXExFRVVVVV14G9BA4HredHvvPqjfHZ599Rk888QR9/PHHm+xhIiJqbGyk+vp6qqurow8//JAee+wxGj9+vDrZrlq1im666SZ69NFHO3UyB/gBjkfYHpxzVFpaSiNHjtzsx+62226UnJxM11xzDWVlZdHQoUNpyZIldPXVV9Puu+9OBx544I8+dt68eTR//nz6/e9//1N2H3oYHI+wPUWjUbr44ovpl7/8Je28887q/ycmJtK4cePo8ccfp/Hjx9O+++5LVVVVdP3111NmZiade+657bXvvvsupaWl0dq1a+nII4+kRYsWUXJyMp122ml0++23U0JCAtu2c47Ky8upra2NFi9eTL/5zW8oEonQxIkTt/bLhm4Kx+M2tn3/cL1tbOqfsQZB4PbYYw930kknOeecW758+Sb/Getf//pXR0Tt/x1wwAFu1apVqu7YY491e+21V/uY8M9Y4f/D8Qjd0ZNPPumIyD3yyCPm/9/UP2N1zrnXX3/dFRQUsOPxkEMOcbW1tZt83iuvvNIRkfv+++9/0v5Dz4LjEbane+65x6Wnp7sNGzY455z6Z6zOObd48WK36667smNswIABbsGCBaxu1KhRLikpySUlJbmLL77YvfTSS+7iiy92ROROPPFE9dwlJSVsm3369HHPPffc1nux0O3heNy2Qv+X48cff5y++eYbevHFFztVf9JJJ9Fuu+1GZWVl9Prrr1NpaSk1NjaymunTp9NLL71Es2fP3hq7DD0YjkfYHhYsWEAXXnghjR8/nn7xi190aRu5ubk0ZsyY9tThL7/8km6++WY688wz6YUXXjAfEwQBPfvsszRmzBgaPnz4T3kJ0IPgeITtqby8nK699lq65pprKDc390frUlNTaeTIkTR+/Hg64IADaP369XTTTTfRkUceSTNmzKCcnBwi+u+3VTQ0NND555/fngZ89NFHU0tLCz3wwAN03XXXsWT0rKwseuedd6ipqYnmzZtHL7/8sgqNg/DA8bgdbO+7823hx/5S90NT+rXXXts+19Ff6qRzzjnHFRUVtYeEtLa2up122smdfvrprI7wlzr4/3A8QndSUlLiBgwY4IqKitzatWt/tG5Tf6lbunSpS0pKci+++CKbf/zxxx0RuWnTppmPe//99x0RuVtuuaXrLwB6FByPsL2df/75btCgQSwkzgpA2mmnndxFF13EHrto0SIXGxvrrr766va5kSNHOiJyH374Iav98MMPHRG5J554YpP780PA3GuvvfZTXhbsoHA8bns9NpCrM2655RZqaWmhE044gVasWEErVqxojzGvrKykFStWmMFG/+vYY4+l1atX00cffURERP/85z9p4cKFdN5557Vvc8WKFUREVFtbSytWrKCGhoat+rpgx4TjEba16upqmjRpElVVVdGbb75JhYWFXdrO448/Tk1NTTR58mQ2P2XKFCIimjlzpvm4qVOnku/7dNJJJ3XpeaFnwfEI29vixYvpwQcfpEsuuYTWrVvXfs5samqi1tZWWrFiBVVUVNBHH31E3377bfsx9YPBgwfT8OHD2TH2w3FshSUR/ff8vil77bUXFRQU0NSpU7fES4QdCI7H7SPUN8erVq2iyspKGjlyJPXv35/69+9P++67LxH994uv+/fvT99///0mt/HDP2Gtrq5u32Zrayvtvffe7dvs378/Ef33RqV///709ttvb8VXBTsqHI+wLTU1NdERRxxBixYtotdff51GjBjR5W2VlpaSc46i0Sibb21tJSKitrY29Zjm5mZ66aWXaOLEiV2+CYKeA8cjdAdr166lIAjokksuYefM2bNn06JFi6h///503XXXUWlpKRGROsaI/nuc/e8xNnbs2PZt/69169YREW3yn8r+oKmpqf28DuGB43H7CHXP8SWXXEJHHnkkm9uwYQOdd955dMYZZ9DPf/7z9huJsrIy84B55JFHyPM82nXXXYmI6MQTT6TRo0eruqOOOooOO+wwOuecc2jcuHFb/LXAjg/HI2wr0WiUTjjhBJo1axb9+9//pvHjx/+k7Q0ZMoScc/T888/TGWec0T7/zDPPEBHRmDFj1GOmTZtGVVVVdMopp/yk54YdH45H6C522mkneuWVV9T8H/7wB6qtraU777yTBg4c2P6vuJ599lk69NBD2+u++OILWrhwIUsHPv744+mmm26iRx55hPbff//2+YcffphiYmLaU3/r6+vJ8zxKSkpiz/3SSy9RZWUl7bbbblvypcIOAMfj9tGjb47vueceqqqqav9tyGuvvdb+z1Qvvvhi2nXXXdtvIn7wwz85HTlyJLtRufHGG2nmzJl06KGHUt++famiooJeeukl+vzzz+niiy+mQYMGERHRsGHDaNiwYeb+9O/fX938QHjgeITu4sorr6RXX32VjjjiCKqoqKCnnnqK/f8fvl975cqV9OSTTxIR0Zw5c4iI6IYbbiAion79+tFpp51GRERnnHEG3XLLLXTeeefRvHnzaOTIkfTFF1/Qww8/TCNHjqSjjjpK7cPUqVMpPj6ejjnmmK32OmHHgOMRuoucnBzzvPjDd8v+7/876KCD6IknnqCamho6+OCDqaSkhO6++25KTEykyy67rL1uzJgxdNZZZ9Gjjz5KbW1tNGHCBPrggw/ohRdeoN/+9rft/1Jh8eLFdOCBB9IJJ5xAw4YNI9/3ac6cOfTUU09RcXExXXrppVvxlUN3hONxO9m+Lc9bV79+/Vj8+P/+t3z5cvMxPxaA9Pbbb7vJkye7wsJCFxsb61JTU93ee+/tHnvsMRcEQYf7QghACj0cj9BdTJgw4UePxf89LUyfPv1HayZMmMC2uWbNGnfWWWe5/v37u7i4OFdQUODOOeccV1ZWpp6/urraJSQkuKOPPnprv1TYAeB4hO7O+uqchoYGd91117kRI0a4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PI8ef/xxVed53o/+d9BBB7XXLViwgK6++moaPXo0paamUkFBAR1++OE0Z84ctc2XX36ZTjjhBBowYAAlJSXR0KFD6corr6SqqipVW1xcbD73+eefvyXfDtjOcDxCd7Klj0ciopKSEjr33HOpf//+lJiYSAMHDqQrrriCysvLWd1nn31GF1xwAY0dO5ZiY2PJ87wf3c/S0lI688wzqVevXpSYmEi77rorvfDCC1vkPYDuA8cjdCedPR6JiJ5//nnac889KSMjg7Kzs2nChAn0xhtvqLobb7yRpkyZQnl5eeR5Hv3pT3/60ed/9tlnadddd6WEhATKzc2ls88+mzZu3GjWPvLIIzR8+HBKSEigwYMH0913392VlwzdGI7H7iFme+/AlrBx40a67rrrqG/fvrTLLrvQBx98YNY9+eSTam7OnDl055130sEHH9w+9/DDD9MjjzxCxxxzDF1wwQVUXV1NDzzwAO2555705ptv0oEHHthee+6551JhYSGdeuqp1LdvX/rmm2/onnvuoWnTptEXX3xBiYmJ7PlGjx5NV155JZsbMmTIT3j10N3geITuZEsfj3V1dTR+/Hiqr6+nCy64gIqKiuirr76ie+65h6ZPn05z584l3//v712nTZtGDz/8MI0aNYoGDBhAixYtMp+7pqaG9tlnHyotLaVLL72U8vPz6fnnn6fjjz+epk6dSieffPJPfyOgW8DxCN1JZ4/Hu+++my655BI6/PDD6aabbqKmpiZ6/PHHafLkyfTSSy/R0Ucf3V77hz/8gfLz82nMmDH01ltv/ehz33fffXTBBRfQAQccQLfddhutWbOG7rzzTpozZw7Nnj2bEhIS2msfeOABOv/88+mYY46hK664gmbMmEGXXHIJNTQ00K9//est9n7A9oXjsZtwPUBTU5MrKSlxzjn3+eefOyJyjz32WKcee/bZZzvP89zq1avb5+bMmeNqa2tZ3caNG11ubq7be++92fz06dPVNp944glHRO6hhx5i8/369XOHH354p/YLdlw4HqE72dLH49SpUx0Ruddff53VXnvttY6I3BdffNE+t379etfQ0OCcc+7CCy90P3bKufnmmx0Ruffee699LhqNut13393l5+e75ubmTu0vdH84HqE76ezxOHjwYLf77ru7IAja56qrq11KSoqbMmUKq12+fLlzzrmysjJHRO6P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yDnXPr9mzRqaMWPGFjvGiIh++9vfUltbG11++eXtc/vvvz9lZWXRfffdx2rvu+8+SkpKosMPP3yLPT90fzget74e85fje+65h6qqqtpT0l577TVas2YNEf33xiI9Pb29durUqVRYWGh+JywR0R133EH33nsvjR8/npKSkuipp55i//+oo46i5ORkIiI69NBDadmyZXT11VfTxx9/TB9//HF7XV5eHh100EFE9N/woxtuuIGOPfZY6t+/P1VUVNDTTz9N3377Lf3lL3/p0vc+QveF4xG6ky15PF500UX02GOP0RFHHEEXX3wx9evXjz788EN65pln6KCDDqJx48a1165cuZKefPJJIvrvb5WJiG644QYiIurXrx+ddtpp7bUjRoyg4447jvr27UvLly+n++67j7Kysuj+++/fcm8EdAs4HqE76eh4zM3NpbPOOosefvhhOuCAA+joo4+m2tpauvfee6mxsZF++9vfsu09+eSTtHLlSmpoaCAioo8++qj9ODvttNOoX79+RER000030bfffkvjxo2jmJgY+te//kVvv/023XDDDexfLCQmJtL1119PF154IR133HF0yCGH0IwZM+ipp56iG2+8kbKysrb6ewTbDo7HbsD1EP369XNEZP63fPny9roFCxY4InJXXHHFj27rF7/4xY9uS25vU3UTJkxor5szZ4474ogjXO/evV1cXJxLSUlx++yzj3v++ee3wrsB2xuOR+hOtuTx+EPdscce64qKilxsbKzr16+fu+qqq1x9fT2rmz59eqeOR+ecO/HEE11RUZGLi4tzhYWF7vzzz3elpaVb6i2AbgTHI3QnnTkeW1tb3d133+1Gjx7tUlJSXEpKivvZz37m3n//fbW9CRMm/Oj2pk+f3l73+uuvuz322MOlpqa6pKQkt+eee27yHPzggw+6oUOHuri4ODdw4EB3++23uyAItvTbAdsZjsftz3Puf/4mDwAAAAAAABBCoew5BgAAAAAAAPhfuDkGAAAAAACA0MPNMQAAAAAAAIQebo4BAAAAAAAg9HBzDAAAAAAAAKGHm2MAAAAAAAAIPdwcAwAAAAAAQOjh5hgAAAAAAABCL6azhQf5x23N/YBu7J3ghe29C8qhQ67Wk5XVbOglJema1lY+9jxdEx/HhtGSUlXipyR3uI+K9VyyJD5eT8byj6lrbFIlrrpGbytZ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dN555xFR5Mdsoh07vsbGxtIDDzzAlqWmpqo6HLP9AftjJ+G6uEWLFrnm5ma2bPXq1S42Ntadeuqp7cvOP/98Fx8f7zZs2NC+bP78+Y6I3L333rvd59i4caPzPM/9+te/bl+2detWFxUV5U477TRWO3v2bEdE7sUXX2xfFgqF3IgRI9y+++7rGhoadup1QteA/RE6k0j3R8vSpUsdEbkbbriBLSciN3PmzO0+trm52aWlpbmJEye6cDjcvvyll15yROTuvPNOVn/UUUe5fv36ubKyskheFnRR2B+hK2hra3MjR450gwcPbl8W6TF7R46vZ5xxhktMTOxwe3DM9jfsjz+9Ln9x/EPGjBnjxowZ0z7OyclxJ598sqobNGiQmzRp0nbX9fe//90RkXvnnXfalz377LOOiNwrr7zCaktLSx0RuV/96lfty/773/86InKvvvqqc865+vp619bWtlOvC7om7I/Qmcj90VJWVuaIyF1xxRVs+XcXIw0NDa6xsdF87LJlyxwRubvvvlv9W1JSkpswYUL7eNWqVY6I3D333OOcc66xsdG1tLTs6EuCLgz7I3Q2xx57rMvNzW0fR3rM3pHj63cXI21tba66uvoHtwXHbMD++NPq8j3HFucclZSUUFZWFhERbdmyhbZt20bjxo1TtePHj6fly5dvd33z5s2j3r1708SJE9uXNTc3ExFRfHw8q01ISCAiomXLlrUve/PNN4no2z9XGDduHCUmJlJCQgKdcsopVFFRsROvELoS7I/Qmcj98fvKy8tp27ZttHTpUjrrrLOIiGjSpEmq7uGHH6bExESKj4+nYcOG0eOPP87+/Yf2x++WLV++nMLhMBH9v/0xNzeXJk2aRPHx8RQfH09HHXWU2WMK3Qv2R+gM6uvrqaysjL755hu67bbb6L///W/7vrYjx+wdPb42NDRQSkoKpaamUkZGBs2cOZPq6upYDY7Z/oP9cc/qlhfH8+bNoy1bttC0adOIiKioqIiIiPLz81Vtfn4+VVRUtB88pc8//5w+/fRT+uUvf0me57UvHzx4MBGRCkRauHAhEX27835nzZo1REQ0depUGjJkCD3zzDN0xRVX0LPPPkvHHXccOed29qVCF4D9EToTuT9+X8+ePSk3N5f22Wcfev/99+nOO++kww8/nNVMmDCBrrvuOnr++edpzpw5FAwG6dRTT6U5c+a01xQWFpqBcV999RWVlpZSY2MjVVZWEtH/2x/PO+88iomJoX//+99044030v/+9z867LDDqKGhYVe/BdCJYH+EzuCyyy6j7OxsGjhwIP3ud7+jE044ge666y4i2rFj9o4cX/Pz8+n3v/89PfTQQ/TEE0/QlClT6J577qEjjzyS2tra2utwzPYf7I972J76ynp3WbVqlUtJSXH7779/+9f87733niMi9+9//1vV/+Uvf3FE5CorK831/fGPf3RE5D755BP1b/vuu69LSkpyDz74oFu3bp179dVXXUFBgYuOjnbBYLC97tBDD3VE5I488kj2+BtuuMERkZs/f/6PeMXQmWF/hM7E2h+/76233nKvvvqqu+WWW9zo0aNVf6elubnZjRgxwqWlpbH+o2nTprmoqCh38803u2+++ca99957buTIkS46OtoRkdu0aZNzzrmzzz7bEZEbPny4C4VC7Y9/4oknHBG5+++/fxe8cuiMsD9CZ7Fq1So3f/5898gjj7hjjjnGnXDCCa64uNg5t2PH7B97fL3uuuscEbknnniifRmO2f6D/XHP6lYXx0VFRa5///6ud+/ebsuWLe3LP/roI0dE7l//+pd6zOWXX+6IyDU1Nal/C4fDrqCgwI0YMcJ8vs2bN7sDDjjAEZEjIhcMBt3ll1/uxo8f71JTU9vrjjnmGEdE7pFHHmGP37BhgyMid8011+zkK4bODPsjdCY/tD/+kK+//trFxcW52bNnd1g7d+5cR0Ru4cKF7cuqqqrclClT2vdHInLTp093J554Ijt4z5w509zv2traXFRUlDvrrLN27IVCl4D9ETqzww8/3O2zzz4uHA7v0DH7xx5fGxoaXCAQcOecc077MhyzAfvjT6vL38rpO9XV1XTUUUdRVVUVLVy4kN3q4bs/PfjuTxG+r6ioiDIyMig2Nlb926JFi2jDhg10ww03mM/Zs2dP+t///kdr1qyh4uJiKiwspLy8POrRowcNGjSove67bcnNzWWPz8nJISJq/3Mu6D6wP0Jnsr398YcMGDCARo8eTfPmzaMLL7xwu7W9e/cmImL9RqmpqfTCCy/Qxo0baf369VRQUEAFBQU0YcIEys7OprS0NCL64f0xGAxSZmYm9sduCPsjdHYnnXQS/eY3v6HVq1fv0DH7xx5f4+PjKTMzk+27OGYD9sefVrfoOW5qaqLjjjuOVq9eTS+//DINGzaM/XvPnj0pOzubli5dqh67ZMkSGjVqlLneefPmked59Ktf/Wq7z19YWEg/+9nPKC8vj7744gsqKiqiww47rP3fx44dS0S875OIaOvWrURElJ2d3eFrhK4D+yN0Jh3tj9vT2NhI1dXVHdatXbuWiOx9p0+fPjRx4kQqKCigqqoqWrZsWUT7Y0tLC5WVlWF/7GawP0JX0NjYSETf/iJnR47ZP/b4Wltbq/YzHLMB++NPbE9/df1jtbW1uSlTprioqCh1G5vvmzFjhouPj3cbN25sX/bmm286InJz5sxR9S0tLS4zM9P97Gc/i3hbQqGQO+aYY1xCQgK791hRUZGLjY11Bx54IOth+q5/dMmSJRE/B3Ru2B+hM4lkf2xtbXUVFRVq+eLFi10wGGT3zt62bZuqq6mpcQMGDHBZWVnqHrbSjBkzXCAQYPtYU1OTy8nJcf3792e34rn33nsdEbmnnnqqw9cJXQP2R+hsSkpK1LKWlhY3ZswYFx8f72pra51zkR+zIz2+NjY2upqaGvXc3/1Z7H/+858dXid0fdgfOwfPua4dK3bJJZfQHXfcQccddxxNnTpV/fv06dOJiGjTpk00evRoSktLo4svvpjq6uroH//4B/Xq1Ys++ugj9WesL7/8Mh133HE0d+5c+s1vfmM+98UXX0xNTU00atQoam1tpccff5yWLFlCjzzyCJ122mms9m9/+xv99a9/pcMPP5yOP/54+uSTT+j++++nU045Rd12Arou7I/QmUSyP1ZVVVGvXr1o2rRpNHz4cEpMTKTPPvuMHnroIYqLi6MPP/yQCgsLiYjo6quvpueff56OO+446tOnDxUVFdGDDz5IGzdupEcffZROPfXU9nXfeOONtHLlStp3330pKiqKnn/+eXrjjTfo2muvpSuvvJJtx7/+9S8644wzaJ999qHTTjuNNm7cSHfccQftt99+9Pbbb1MwGNy9bxT8JLA/QmdzwgknUE1NDU2cOJF69uxJxcXFNG/ePPryyy/plltuoUsvvZSIduyYHcnxdf369TR69Gj65S9/SUOGDCEiotdff51effVVOvLII+mVV16hQCCwQ+uErg/7Yyexp6/Of6yDDjqIBWzI/75v5cqVbvLkyS4hIcGlpaW5U089tT39TTrllFNcdHS0Ky8v/8Hnfuihh9zIkSNdYmKiS05OdpMmTXJvvfWWWRsOh93s2bPdoEGDXHR0tOvdu7f785//7FpaWnb+xUOng/0ROpNI9sfm5mZ38cUXu7333tulpKS46OhoV1BQ4M455xy3bt06tr433njDHX744S4vL89FR0e7tLQ0N3nyZLdgwQL13C+//LIbP368S05OdgkJCW6//fbb7rduTzzxhBs5cqSLjY11ubm57sILLzR/kw1dF/ZH6GyeeOIJd9hhh7nc3FwXFRXl0tPT3WGHHeZeeOEFVRvpMTuS42tlZaWbPn26GzhwoEtISHCxsbFu+PDh7vrrrzePwzhm+wP2x86hy39zDAAAAAAAAPBjdYtALgAAAAAAAIAfAxfHAAAAAAAA4Hu4OAYAAAAAAADfw8UxAAAAAAAA+B4ujgEAAAAAAMD3cHEMAAAAAAAAvoeLYwAAAAAAAPA9XBwDAAAAAACA70VFWnh44OTduR3Qic0PP72nN0E5qs8laplrbeULQiH9wGCQj9vaVIkXF8cXRBsfk6Zm/tzWelKSxQY6VeNqarf/3Na6U5L09lhq6sS6Yzt+TCisn7++YfvbQ0SBjLTtPoaIiDLT2XD9yTmq5LxfvsrGo+I2qppD+32l172HHTno92qZ19TCFxg/f/I8XmK9bwFPjIOqJFxTw8bB7CxVEyou4avJzNDPJfYt9RqIyDU28proaL0e+Tkj0p8143Fq3cbnQX6uw5VVqiSQnsbXK+cGIvKSEnlNjPE6Siv42Kh5rehu/bg9DMdr/+qMx2vsj/7VGffHI3Nm6IVpKWzoNhepEnnMdInxqsZtKeaPSdbna06eZ7Uax1lRYx0LvWR+DKNmYz1iG70WfSykgP6e1MXz80Wvzjg3aTPOsdVGinMc41isztXTU3WNPJ+NMs7Lxbm6dUx/7csb7e0U8M0xAAAAAAAA+B4ujgEAAAAAAMD3cHEMAAAAAAAAvoeLYwAAAAAAAPC9iAO5ADoVI2xLBU5ZYQEyXEuEBRARORk8YARQqVCsiiq9nspq/lSJCXo98vnDOhCLwjzIyQxGiI8gyMszwo1kSJQRGiXfVy8uRdVQK38uV1ev1yNCmvo+p0Ob5j8+io3/NfkoVbPiHv30e5oZXBUX03GNCKAKVVaqmqj8PDYOV9eommB+Ll8gAuOIiIK9evAFxufDidCLcEOjrmnhryOYk61rjJ+/DLPyjKA7r1UEahgBI54M2bACwUTAiBfbcRidV6u3WQV6hI1QNQAA6DLM4FNxzAjIYyqROq56xjHUyxJBl1aNDJNKMMK25LHGCLIKbdrKxoGCnno9jSI81jg3cE1NallABsoaoV0qAKu6VpV4MuSzTZ9zq2N4g94eVROlzx9dI3+c9fOJFL45BgAAAAAAAN/DxTEAAAAAAAD4Hi6OAQAAAAAAwPfQcwxdk+wvJlK9Ha7e6HtNT2Pj0NZiVRNIM25ALtcjbqRudSK6ZtHbYdyQ3EsSN3G3eiREH7JL0r3LnrypPJG+kXqz7lmRN3qnBt3P6ol+GNlLS0TkiT4W6z1UN7Wv0v0pspc877lvdE0n7Dm2eLIP2+iflT3nwaxMXSN7oVJ1z7erF73Bztgf6sWysNELJfZH1cdPupde9k0Tkb2vx4j9xng/QpVVbByQnw8icg38ffUS4nVNGu+X8sqrVI3sWbJehxOfc+u9BwCALiRofC9YLvI+EoyMGJnt0mj0xsaK45yRjxOuEec+RtaMlyyOYcYxVT/I6OcNiGVGho55vib7oKv0uaF8bdaxWG2TdbyW5xQt+twgkMuzTazzUJX9Y70fEcI3xwAAAAAAAOB7uDgGAAAAAAAA38PFMQAAAAAAAPgeLo4BAAAAAADA9xDItRt5sTrMZuPvxrLxw+feoWrGx/LG+2tKh6maV285iI3T/vXBzmxi12UFIQR5wI6XqMN8ZOBVMC9Hlbj6Bj5uMAKHIuAli5ufyxu/E5Gr46FhKqCLSAUXWTc2dzLggYg8GR5khD5QpQhZEEFGRETUJMIRyqpUSVtpKRtH9TJuRh/LfxfnrICJmjr+GBni1IW4av7eyjA4IiJXx/c1zwoKEaEXbSXbVEkgie9rgQzjuRrEZyY3S9WE127k68nMUDVyv7LCMzwrCEMEgZihG3L/b9XhIV4K30fl55WIiErK2DBUrT8fgVQReBIXp2pIzuHOit4DAIAuwwo+FeS5GRGRl5IkiozjgVhmBagGxLmqCr8iIk+cG7hEHWSlzl/lMZ5InfdZ55jhDH3e523lx1BKTdI18tzQOH8JF/PzFS/RCDrLTGPDgBUwK875PSvgVJxzy0DNHYFvjgEAAAAAAMD3cHEMAAAAAAAAvoeLYwAAAAAAAPA99BzvJC9a90KG9uW9wZc/PE/VHBL/Phs3ON1T901rMxtPT1uial4OHqSW+Uq00a8qb3Yu+jqIiMIlvDc2kKz7KNRqZe8uEZHol3WxRs+G7Jc0+lM80U/q5A3kiYiM3he1HqtXWfRoWL0vsg/U6mdWPSvJ+rmCGeIm8k3Nqkb2vHpWP4j8ucqfaRcie4xdZZVRJH4/mZyqa0RvTXBAX11TWc3HYWNfEz9/V1qpa2Q/cbzOTaDyKj52uj/IGf31lC36l0srdE0kPb2yn9l6rrDIFsjR/dUUED3wkfR97WT+AAAAdA6RzONeunEsFo9zVm9sND8eyWMIEZGT/bLN+nyJ5DldRZUqqdt/ABsHWvXxs2ogP6dK2Ka3OXW5zjGR516e9VrF+as8nyQiCmRlsrFr1O+9Vx/BcVX2chvnJvKc2wvs/Pe/+OYYAAAAAAAAfA8XxwAAAAAAAOB7uDgGAAAAAAAA38PFMQAAAAAAAPgeArkiEBQN5UREq64doJatPm5Oh+v6RzkP7XrpxkNUTcrjH3a4ngz6oMOabs0M7hFBPTIQi4i8Xvl8gREE4InAH9di3GxcLPOM8K/Q1mI2DvTtrddTW8fH5TokidJEIFizDrKyttGL4eFeZqCCqJEhXkRElMBvPu9idRhaWxoPe4ou0e89ydAuK4RB/lytgLDOyNgfXU0tX2CE+KkwK+v9F/uWK9LhGfJn7Rp0CIgMbXNN+rkCKSJYztpnZGicDMgiItdqhK0Vl/GHWeFzcTxkI5StQ1GC26r4AiO0zdWL8De5nxNRWASkBVp1qJ56bUH8Prm7CmZmqGVZL/N5rGT/mp9qc6ALiOrZQy1b++u+bHzgUZ+omvt7L1LLri8bzMb/fFOfGw6ew+f+0Jq1kWwmCNaxR4VkWcfieB7aaAaYNvH1mEGoqfxY4zUYzyWOvV/d1keV5GfzY+rRPT9TNSPiN7FxYXS5qpnyyO/Usr4v8u0OFukATXkMNYNh0/n5q2cdQ0U4q3n+IMNLZTAoETkRlOtZwb0RwpEeAAAAAAAAfA8XxwAAAAAAAOB7uDgGAAAAAAAA30PPcQTCT8WpZasHd9xfXBnWfQT/fnASG+c9/v7Ob5iPWTcSV/2B1k3cZW+o0f8g+x285CTj+cXPNqx7M4PpafwxJaWqxkvmvSdWryhVVvMa43V5UbrnmZr4jeVbe+ve+bK9eV9Jc7ru32zM5301sfl6GxPi+M9jQHqtqvnyOd5T1fu5rapG9vm4LtJzbN6QXtY0N6sauY+6iipdE+b7rBenn4ui+FTuxes5y4ke79Be/VWNt3ozH8cYPTviucjY95zoRSLS+7rsZSciKjuQZwJ4p+jPTMx9vCZp0Tr9XLHiPTJ6zMLi8+FCel8LiB4qL8HoH4MuSfaLusd0zf19XmDjn505S9WkP+zz/A8ficrLZeOC53Uf5vM9XupwPUua9fnCPz+dwMZ/Oup5VTPkeH7M/M29F6qann/HOWVHXGaaXripiI/lcY5InVPJPBAiImqTeStGtoY4F2wZqY/FuTfw49pT+f9RNTM+n87G/3zlMFUTM4jnJPx+2OuqZvLRS9Wybx4S/fTGMTTQI48vMHJ+XFkVHxsZIeo9s957eR4Uwfm9q9r5jAh8cwwAAAAAAAC+h4tjAAAAAAAA8D1cHAMAAAAAAIDv4eIYAAAAAAAAfA+BXIbwgaPY+KLeT0X0uLIQD7w54vbfq5r82xGWsLuoG37X1quacD0Pk/KydUiVWo8MYbDIoC8iFRDmxesAIifWbQb+yMCjOh2I5cRN5YmIakfzsITMi9ermumZa9j42GR9E/naMH8/NrVlqJomUTMmbrOqKZ7Jw43OGHGOqil8gIciRW/WN6zvlIx9LVTFg9SCOdn6cS08/M0ZQRRegP8OM1RaptcjgkG8PL1ff3mFCM+I0wFUvV4cyMYpy4tUjWtu4Qvi9b4XSDPCMsTnav20Hqrk6JN5uNGMzIWq5vhCPq8mL7XCtkRgnhEmEpRhWxlpqoZCPDjHVe98wAdwweE8oC/0+Vc/6fMXzeH77QeDjEQuAeFb/rbq7z3Z+Pker6qaC7ccyMbL7x6latIf0fvRQFrOxvMmH6tqjrjlXb7uWbNVzcFrL2DjpKcXqxq/86p0YCjJ4FUVrKUDQuWxmYjIJfPjClnPlZ/Dht+cpI9Pd4p96+biyaomaXYKG2d/U6xqwun8daU9rs8ff5XxoVr2yyvOZ+NhN+hzAZKBqTIUl4i8xPgOa8Ip/LzXq9dhxp4M+zICNEn+PLL1uWqk8M0xAAAAAAAA+B4ujgEAAAAAAMD3cHEMAAAAAAAAvuf7nuOA0eOZeP0WNj4qQfcMlIj+YiKio+/gvXD5t6K/eLfJ0T2VVCt6KaKN/k3ZGyx6PokoshuSJ/P9Rt7onIjISxI1DXqf8WQ/sUX0dbgkvc+un5qjlvU+eCMb/6nPy6qmR5D3PH/dmqJqPm7sy8Z3LTtY1WS8F8vGTVm6ryRr0lY2DlRFq5pgvX6PuoSUJLUoGMP7iFxLi6qx+pokJ3prgvl5uiaWv5dbD0pXNY8ccQ8bJ3p6e6ZG/YaNk9bp1xUQnyFXUaVqKEb3ULXl822S/cVERJdn/4+NFzbqvuTeD6ziC4z3PpAleo0adA8TJYrPkeyfIlI/Hy9B5waAFtWT/9xK70tUNef25/3k/3jx56pm4DWfsHG4QffL7awJ+et32bqg+9n05wlq2aeTbmXj2yuH68cdx3vZ00t2rk89btlatezLejH3Z3ypamr78HMKPTtCuEaf03s9cvnYOGZ4ItvDypqRj3PNOrOmqSc/z5o0fqWqWdOaxcYfP7q3qunx+YYOt6dmLH9dlyz6paqZstcnatnPRvJ9a/PgQaomfvU2/vTG+ZvnxHmekf+h+pDLq3RNmj43VcI8I8Srqev4MT8A3xwDAAAAAACA7+HiGAAAAAAAAHwPF8cAAAAAAADge7g4BgAAAAAAAN/zfSBX3ZF7qWUvDrjHqOROWnmmWpZ/CwK4fipuwxa1zMvhAQauToe3eEH++yAXZ4QD1PKQLs+6sXlNPV8gb/xORNQsAo+Mm5a7RhHe0EcHENUMTWXj4gl6ex76ud5nh0TzbVzbGqdqfrdpCht/tESHLmSu4M/Xf6MOmIj9ehNfYASNhWeXsnHhUP2eBcpr2FgGTXUpIhzC4kQgnNw/zcck6J8jbStnw5ylOrzir18fz8ZPDZ2nas4bxQOxnh15mKrJep/vs16qEZRhBN019uBhVgPitqmakAgUeaJkvKrx4sRhS37OiMjJoDMZpEJEFObP5QX0ey+DW7xkxNtEQoYGLhz1uKoJiN/NnzH9TlVz5Fvns3HM60t3wdYBdOyA43RIUazHj0f/euQIVdOjZNecB66Z3Ucte6H3P9n4n9W6pvezm9m448hH/3GNRvDn1hI29JL0+YkToY1eohHQKM8XA/p8LbqGH7OOz1ymah4pPoCN07/S513WOaWUtqKMjcNRWapmr303q2X/bRjBxnEbqvTKm8Q2OeOcRwZwGedF3qZivpqeubqmSoeoKTIsND2CEK8fgG+OAQAAAAAAwPdwcQwAAAAAAAC+h4tjAAAAAAAA8D3f9RyHDhnDxn+46ZEOH3PWhklqWeb5+u//0dvx0/ESjF4P2f9gUD0IIaP/IYb3SLj4WF3TKJ6rUd8wXt2QPTNdr6ea91GsPTlD1ew96Ss2/r/8d/RzGX63+Sg2XvjJEFXT803eDzP43W/0Nso+bdnPSUSUyHsMndE7K39m3oZiVUMpybymWfeudkZeq35PVL+q0U/uhXk/OW0pUTWyX9Yz9nMn+pqiN5WrmrWf9GbjTYW6n3tgLH/+6oF6c7Jeq+PPrUuIMlLVotJR/HCTF12taprEypZ9XaBqhsXy3nXzcy/fsxgjW0Dso+FtZaokkME/s65e5xiAFvrqazb+2ZWzVM2S6+ewcauxIw29diUbf/P6zm2PN3a4WjYx9WU2lj3QRNaxv2rnNgC6nPt7L1LLljTz84Ue/9h9OTP9b9f9pH8aMo6NC+P18aJt/cbdtk3dRbBnfsdFxrmhypapqVMl8vzIi9fnqtWFfD2vVI5SNb3jK/lj6nr+wIZ+T7zOI/Ea+Llp0lad0dE72jhfqMxk4zxnnPdFi3OIJuM8WPYYW+9rOj9fsM6nKEY8l1HjZP5IWZVeT4TwzTEAAAAAAAD4Hi6OAQAAAAAAwPdwcQwAAAAAAAC+h4tjAAAAAAAA8D3fBXIVX8TDWybH13f4mK/v1kFGqRs+3GXbBDvBaupP5KE7ngjlISJy20TwQJT+CLgWHgLlGTdxp1YRFGWtJ5mHVKkQLyIqm9yfjQcdvFbVPNj3FTZea2QV/OL9GWpZjyf4+zH0Kx264NU3srEZthXLXwdlpqkSV8bDI6hBBzOEa3l4RTArU9WQDFSI4Cb3nYLcbiLyZIBEiQ58ksFRToa4EVFABJk5K4AqzB/nGnRwVEw1349frhmlaqanLeHPHdL7vidCP5zYh4iIGgvS1LK8A7awcd8ovT/Oq+aBMymf6jA8GcBlvWeKERAn1yNfFxGRa+SvzQwChA6lP/yBWnbNb4ex8R+yPlE1wxP5PrN+0HhVE1qtQwSl0rEpatnPE/nn0Tii0LI3+Db2od0XwASdS8jpPaK4TQcN7ipR/fuy8aQHdSDYRelr2HjMktNUTQ/6YpduV3cULtXHnkCmCEP1jPO+YhEGaR0PxLmpS9M1AXGa1S++VNVsaeZhkPW99HpS1vDzDmOLyYlArE2T9DE16Ol9vXIr39ezMvV5R7Cen+N4cUbwZZ04FzHOlamqho+N8FoV7GWcl3tx/LVZYbqRwjfHAAAAAAAA4Hu4OAYAAAAAAADfw8UxAAAAAAAA+F637jkOJCaqZQMzjb4/4Zdrj2DjzHc3qRqjMxN+Qmbvn+z7tG6IHieWWX0lMbxvwkXrj4nXxnthZW/it8/P+x3qh+bq9ZzCe02uLXhe1TxUPZiNb/voMFXT6zndX5344Tq9TYIL89fhpSTpGtE/7FVU65rUZF5j9BwHUkTfn9FP7EQvt5ekP8OdkezrISLyUvh74iqrdI3ovzG7Z6PEz7bB2NfEejyrx1Y4IvkztSxBfByaeraqGhcrevtb9WzYmqSf/+jcL9l4eIz+XP16495snL1c70euSeyPScY+Wy/6nAJ6e5x8H42MAk/s165Rbw/snCeeP5iN/3Cu7jk+N5VnMDx00LGqJjOCnmOAXeHDuoG7ZD1RPXuoZRe88RobW3k4ey06k40HXKx7VXFu2rFAeppaprI8Wo0cEdkL26KPj5QjslSMc4OYGn7u0xrWx8KLs95h4xN66LyF1Gje8+ta9DZTgB/XgkNqVUnQOPOIK+bbFL21SK9bvH7rPEit2dhGL17kqhjrkef38lyRiIgy0vh6a+p0TYTwzTEAAAAAAAD4Hi6OAQAAAAAAwPdwcQwAAAAAAAC+h4tjAAAAAAAA8L1uHcjl9e2llj098PEOH7fhwUI2ztj8wS7bJtg1XFqyWubViACLNiPwqZ7XeEZoG0UQZuREEIEXo29+XjEuh417XvC1qvljr1f5Y0IJqmb2i0ezcf839M3YY75Yb2wkDzXwRHgDERHF89cf3lqsSgLZWXy1DQ2qxqsRsQux+v3wEkWImvHzoTYeJ6JCMjopzwp2k6ESUXq6deL1BhL1z1+GSYWqqlSJDHiRoVVERG2J/GcUIr3NcZ7Y90O6xpM/E+O1bzlCB2pMSFzDxv9t0J/h2mV8X8usq1E1FM33rXBFpSoJiDC0cLVejxfDPw9W+JurE3NKeqreHvjJNKcan7MIZEzb3GHN8mY97xe8wMMHzcA86JZGf3SqWvbhuEfY+MAZF6ua3H/xYLm1fxypap4/7Ra1rHcU3/9GPPRbVdP/7yvZuK1WhytBBIyARi+OB6jKsFIi0gFcRlgrlVXw9RrnXYkrebjUIy8eqmqmnbaMjS+54BlV8/jSo9g4WK/DrpryeWDlAb2/UDUjY3RwVUIRn+3C4nUREQUyRECZcW5IIrBThZqREXpbqp/LZabx9dQZs7EMBzXOQyOFb44BAAAAAADA93BxDAAAAAAAAL6Hi2MAAAAAAADwvW7dc/zVufpv26UlzbqHqTWJL6uevl9Ez5e5YD0btxXp/k3YNVR/MRGRuCm4C+m+Ry9Z9DkGjB420VcS3lqiSgKFfdm4cq8MVZN07hY2/kef5/VzCcua+qplnmijaMjRfRQu0Fsti/10I68x+ndln00gPU2vWzzOS05SNbLvNJSmawJbS/mCtBS9mhDv83FJRg9uJxSu0b1fsqfVFAyyoWvWPUMk+oejcnN0jeP9N57R35yxktf0+JXuD2oSbTyn779I1XzU1JMvMH6OZ47Xj+sfzft+Fzbq+bnX2/y1Bot1P7HqI7J6w0SfVyA3W9eI98zV6r4ryaszeqrgJ3P1eY+pZffd3L/Dx13UZ0GHNakBPT82FPA+9PjlHa4GuomeV+tzg+l3HsPG919xh6r59dGnsfHKsXepmgDFqWVDHp3Jxv3/rLNu9BkN7Awzy0QeR4wsDXk+4mL1cdaT/bNN+pgusywGzt2oak4fdzob3zb436qm561r2fjjf++laup78OPcn7M+VDVzKkerZaFY/vq9eL3Pyp5rL07XOOLHdGccQ53onfcKdF4UlYtzAaOXWx3DZYbKDsA3xwAAAAAAAOB7uDgGAAAAAAAA38PFMQAAAAAAAPgeLo4BAAAAAADA97pVIFdUb97E/cTxs40q/vuA8bH6RtIf/cF6XMd+8TUPa6BT8lQNQrp2DWfcbFzdbD1Hh2SpwCMRiERE5IkghmDvHqqmagRf9z//fquqyQzyfStk3LM8KJ7r6MTVqubg029m4//bcoyq+fi/w9SyvptT2diTN0gnIlfP30cvoH9f5iXzUBpn3AyecrPYMFitA9PCIiwhIMLAiIjClVUd1nRGZkhZilhWpUO7FOvXlU7EsBhBIYoRyJVYxIPm/rh5iqr5v14vsXFrWH8+Np45kI17HbFB1RyV8olaliC2O9EIQNo0if+8+9WmqZrg1nI2DtfoIK2g/Hk0NqmakNzXjMARL1Hs+016PbBzCq56n43fPDVZ1UyO5/NIYcw2VRM65CQ+/lO5qjkqYZmxBfzDNjBazzUL7p7DxoOOmaFqBv36I2Pd0NWFV3yhltVcNYaNN92nzzE+GvuEWKLn6wl/mKmW9X9UB3DB7iGDSImIKMjng7AMgCKigDzW1BvnoYkiRFQGSBKRaxYhp0mJqiZtBj9f++3caarmmB6fs3HfM99RNfJYPD5WB1mNidFJg1+cks/Gn0/S1zNZt8azccw3en6W5yJWWCiJ98yr1udKTp6rW4GnMmgt1KprIoRvjgEAAAAAAMD3cHEMAAAAAAAAvoeLYwAAAAAAAPA9XBwDAAAAAACA73WrQK6q/Xqy8eiYnbv2/7yFN8Kf/dnpqubW4U+rZc8OfIWNf/GkDk6iabls2FZcshNbCF58vFrmGhv5gjIdqECpIvSlolqvJ5WH+XjNuqm/fAQP2Wg1fs+UE+QBPx82hVTNXcWT2HjRVwNUTUIKDwG6c9STqib/BP06li8czcYxn61XNTIIwkXrKcGr5++rl5GmaqiBb6MZXCQCmZwMTyAirw//DDsjFKMz8mJ06Ea4uJSNA6kpukaEQnnG++9kkJpnzGup4vNQVaNKoiv5z2TJ0kGqprUnX/ep6YtVza8v4EFKJSH9WbRCP5pFIN3IGB1OePbxb7LxvxoPVzV9/1XFxsHMdFUTLuWhTFbgSTCbh8iZQWdhEYZmhYnALvGHe89Wyw675A42HhytA+JufegeNh4qgxmJKExhtWynGKGK4B/N6XzfOiZBH3cbHT9faJWBikRUNkbvSGmP/siNg4hZ5x7UpgNL1ePE8cDL0oFs4a38uBbIz1U1XoI4Zjq9PzgRYJr0156q5o3MiWxcMVTPfc8ftDcbfzhO72j3VY1UyxZ9ys8Pzpnwnqp5/KJxfBtf6qNqst/bysbWOV1YBJQF83JUjRfi7715/iiCvVz8zge64ptjAAAAAAAA8D1cHAMAAAAAAIDv4eIYAAAAAAAAfK/LNlBF5em/47/vH7eLJboPUHqoprda9vzxE9g4+6uvVM3lZ/1GLXv/2rvYWPYgExEdNeTXbBxEz/FOUf3FBnUzdiIKF/GblHtxcarGa+S9DFb/bNImPt7UlqZqhkbXs/GbdcNVzfKXhrHxkJcqVE3lKL7ux3pOUDW/z3tdLTvxoP3ZuP+GZFXjavjN1j2jX4/ixXvUonuwZX+M9d5L1s3gXUVVh4/rlIyeoYB8D4waT97YXo6JKCD662XfE5HuC3dGX3JgYxEbJ69LVTUv1/L+pNNTl6uajKDs49GfxSXNutcnzuM99y/XjFU175YWsnF8qdHkGSXeI+t9TUgQYyOjQO6zyUm6po7PBV6M8fmAXaLP4+vVsttP5/PjJRlfqBqrD3lnVIR0D9tBj13OxkMfK1c1OkkCuoPaU/ZTy0768xsdPm7sw79l47ZEPT89e/wdatmf7vklG4fWrO3wuWDneIn6eECip9VIoCDX0MDHFbp/1hPZIq7BOFeV/bPNLfaGfk/UVn1uGLWR90knrNe5JtuqebZG6Wg9zz38pd7XBz3Mz3vfeVKfdz7+0Bw2npFwqqqpbM5n4/QP9echKI7hZvZNM3/vzWO6eK+90M7PzvjmGAAAAAAAAHwPF8cAAAAAAADge7g4BgAAAAAAAN/DxTEAAAAAAAD4XpcN5LKCawZFdxzAJVWHdFN36KuvO3xcfCViOPaogP75e7Hi52804wdSeCiVFbblRDaCl6KDrGKreKDC0vr+qqZv1DI2/rRG38S97+Mi2cvYr0MxPBqib7wOhWlwRrhVUIQcGGFCMjzCDNuqrOKPSdbvhwztcik63EiFRrXq51Kvv61N13RC4eoavVDsfwH5XhORi6SmReyQYSOkyhPL0oyfURUPX8tYpUNA5i46hI2X76UDC8/MXcTGI2J0wEf/KL3ukhD/Xez9H0xUNX1e5vt61lb9vjqxH1FAR6fI4CwZPEekQ7tkQBeRDuyz1gO7RtuWrWrZvIcOZ+OBMzoOsCyM2aaWRRLa9X5TD7Ws358+YGMc9f3j51cuUMsuSl/DxuOX6gCivn9dwsYBGWhJRHtN1cficGrHIZawa7hqYx7Pz+bjbfo8S4Y2ukZ9/qjOWfKydc1WMUc162Ool5HGF7Tqc6GwDJU0zrsaevDj48qWTFUzNLdYPy6Ux8ax68tUzbTHLmHj5WfpoLmfpVzMxk6epxOR1yRef5Vx3BfvqxWYph5jhJdGCt8cAwAAAAAAgO/h4hgAAAAAAAB8DxfHAAAAAAAA4Htdtue4rUj3Ho2ccxEbf3L+7N32/CVjO+5heq4+Qy2LKeJ/S48epp3kjF4C0b/pEnSvD1WLvoks/TMij3czGB2elLyuno2XVfVRNQcmfcXGS9cWqJqeY0RvpLFblU/k/Zu/TPtI1ZQavfO5H/H3wzN6VkjcfN4ZPceyx9jV1esa2Ucie0iIdC9Oqu6L9eTzt3XdT4jsH3b1DbomI53XGO+taxQ3to/RPTtO9rXVGP2z4mcUt/ALVTP0A35IqDH65a741Tls/NfzH1M1Q2L0/LywYSAb93taf4bjVxWxsUtJVDVeotjXjf1afvY9o/dIva9RxuFQ9C5b+QOw++Tf+j4b33erznaQNlwzXS375FzdCwfwfVWn7c/Gv8u4W9VsC/E5I+tWfdylMD9mhev1nG5ZP4XPLQVLI3oY7Awrf6Wimi9I1v276rwmWR+fKCC+c9yi+3lJ5COFa3UPdCA3i41dqe6Blhk61rGwOZ0f+9IC+jwkKVqfr9WLpl6V9UFE6V/xs+On6nqpmsRf8Nfv3o9VNTKPhtJ09ooXEsdw41xVnmN6xvlLpPDNMQAAAAAAAPgeLo4BAAAAAADA93BxDAAAAAAAAL6Hi2MAAAAAAADwvS4byCVDD4iIel+/mI3HjD1N1Xw8/lFeE79e1Tw+8zds3JyuSmjJWbcYG8Wb7GdfcYqqSPhqsVoGO8HpmCyXlMDGqsmfiMKiiT9gBT6JdTsr3CiBhwpsq9fhDeNi+eOe/Nm9qmZW1i/Z+KIBb6uapjAPj3inoVDV/P21KWpZ/xoesmAFQjl5E3krhCKaTxNenA5UoCBPEnNW4IV8r8sr9XrieICCFRDWGalgDCJyzSLkIlpPty6Z77NkBHKpgI9YI9AiWgS7NRr7vvhZm9ssQ9OMwJHGHP752Cu2SNVYAXFS3JI1+vlFgIbXbPz8ReiIizfeD7HfhCurdI0Mmms1wuhaxX4swvqgE/L0sSEQwfcA0Z4RWAi+UTOFz49BT+8z01bxc8r4d5d3uN6ovjqsM+itUMuas7tu+GRXY4YvRok0VCvAVJ77lFfpmmwR8hqtAzQ9ca4atMJjm3hYKiUkqBInzqk84/iU/bFYcLx+ql9l6+uSP40ZzsZ5tWmqJmkz38bSNn1OERDzcShZH68DDU18QVWNqqF4fk4RrqpWJZ44D1U/rx2Ab44BAAAAAADA93BxDAAAAAAAAL6Hi2MAAAAAAADwva7bc2wRfcg9/8/oD3uZDyfGtaiSRX+8na+Wwqom1tN9BM/W8Zt2J39ZoWrQVbJreDH6/Vc9GrJXk4yeWqPnOJzG+ybMvuQ2vk+0vpCtSv7Zh/dsTE/9TNW8vjfvga81eunfbSxg4ztumKpqBi2vUssC1aJ/1Xg/1I3ujZuvU7W4Qb3RryP7Na3eF9fA+2C9BKMvNSR6aGKNn3NnJPuViIiSRFhBSakq8SpFb02q7tnxQrzv18Xqfu7wZt73G8jMUDWe6Nkx+/Zr+M86kKR7jlNFq/D61jRVkxbU/e0r63uxcbhB1wREr7qr1r1H6rNfrTMBXCufCwJ5ObpG9ndbfWgyf8DoS4bOpdfbzWrZqtP1z21wNP/MtrrudToEOybwMZ97QxP0ed+mb/hxfhCt63C9X/xZzz0hp9fd71mcHf5UXKrOVvFk36uREUKNosY4ZniNYv5J0r3CKruiWV+HkDg/8oL6/M2Jc7OwcY4RXZ/LxjdvOULV/Kvfq2pZ7UR+vpa6Pk3VtMXzbfq6Qe/rfZL5dVB5iSpR/d3hvvmqJLBeZ5sosuc4pD9nkcI3xwAAAAAAAOB7uDgGAAAAAAAA38PFMQAAAAAAAPgeLo4BAAAAAADA97p1AoVb8YVaNnr2RWy8/KLZqibak+E6Omznxfp0teyRk3mje3jVlxFsJewMZ4QcyEAF16JDWDwZ+NPYqGrkb4xcm74ZvHyuvJc3qJoFr49g439NOVLVhA6pYuO6Ih0Ukf4p3/9yrfCtMn1DdAqLMAIrkEveRL5evx/qRupG2JYM4HLx+ubrngyAskKs1Pbp974zsoIwAlmZbOxydWibK9rGxp7xM5L7sREzSJ4I4LL2ffWYRB2IFsjm29zcL0vVVB/Og7RiPB0k0+r0z/bNdYPYuG9wdYfbSAG9HlfPn9/L1HMxOfHaWo3PsAxTkfs5ETn5eTAC86Bz2XxwnFomw7cApF43vM8XXLhz6wkOGsDGz0y6R9WsMPKX4jZUsjFmmt3HOs9x4tzQM4JY1bmgFfjUKo7hxnmOC4ijeIoRECZCusKl5aomkMGPfV6iPi9O+ZCfm37xxiBVM/1wfVZxyz5PsfHvo36hakJr+Xb/IlGHZs1+nZ/3DmkwQuxE8Gpgg07t8mL58VmF6xJROFmEmJXrQM9I4ZtjAAAAAAAA8D1cHAMAAAAAAIDv4eIYAAAAAAAAfK9b9xyT7HEkop438r6SY28cuwufED3GP5mSMr0si/ddyj5YItI9rFaNWOZFR+sa0Y/iGnQPiyf6SHr8+2u9nkd5b6jrnatKvBJ+E3Vze2R/MZG6Qb1r0Y1Onuzdtt6PCPpXQ9lpbBws1v0xqufZ+Hxa/d1dgewvJiJyTbwv3dwfjR4hRfa5Wu9RkPc1eUHj955yf7B6vrfxn1tbQp4qiYltZuPkQJOqCZL+2bZuTWTjQKzRly77gK19PUH3lCpNfBtdq5E/IHuWxGOIiFyD6G+Oj+C5YY+KrtfLmpz+zMR53fv0B36cP5Toc8Of7/sxGy+4fIKqGfeLz9h47xg9zx5xxnlqWfSaZTu6ibCzgkYfcDHPDfFSU1SNFy+zLPRxJVxbx8YBI8sivH4T35zcHL2N4vgs83KIiFwdfy6KjlE1Ut8ndF9w8wP6/fjjXSew8QF9dK9wY0++TbOXH6JqhtyykS8w3nvJykNxjeJ8yng/Att4377sZd4R+OYYAAAAAAAAfA8XxwAAAAAAAOB7uDgGAAAAAAAA38PFMQAAAAAAAPgeEimgS/JE+BaRcWN1I7jHq+VpLSpggUgFHrnkRF0jwqQ8IyTJVYsbkHv6d1GeCAzwanWwF8WIUAEjBIKM0AcVLOaMQAcRJGYGDolgCFdVrUoCYptcKKRq5E3cnRGApMLGrBCrzsj4+YfKeZBaVK+e+nHi5+aq9E3r5T7irPC1RvFzTErSNdFiuq81kovEZyjhfR0i5/YeysYvDhitV2MEcqWs5vu/Z4SRyeAsM3xO7BNmsFgzD5+T7yEREYX4++hC+n31xGfPCt6DzqXHTe+rZaOHXaiWrTp8Lhv/btHJqmYQISTJr1aePVQt++pSfnz86pLZquYPxfuw8YQ/630v480PfuTWwY9inJ8ExPHIxeljhivaxsbW+ZInj+nG8SmYL4IurXDSGh62ZR7T5bHQCl2Vx9AmXWOFZPW9lJ+LfL3XMFUTjubPP2TpFr1ued5hvdY6cV4uz3nJeK+t8yDxOlyDDguNFL45BgAAAAAAAN/DxTEAAAAAAAD4Hi6OAQAAAAAAwPfQcwxdkgsa/buNvIc1LHt+iYjiIuhbkOut77jP0CXp/klP9lZY/bytuldVEX2gLjVZP5fVWyFfm9W/28J7PMN1ug81kMKfz5PvIZF+bcZzuTLeg+sl6x4a18Rfh2s2+mM6oyg9lQZzsvkCq9emVvQVpaXomroGXhNj9OGKviJX36BKXDP/fNjrEb0+so+fiAoeWMPGb39xgKppTtE9TLlf1urnE7wk3t/vqvVj1HtUVqlrRN+XNRcEMtL5c9V3vO9b7wd0foVn6t7hKcR7Q9FfDN8XXvGFWlZ4Oh8fS2OtR7JRBqG/uCsIZ/HjgWecewRE1o3KlSFS5wLOyoOpFLktAX28VMfCRn0eKvuJZe8uEZGXlsprxDkH0Q9k+IhziMTF6/TjRK6PmSMjM2uM1xES72NUbo6qkTkiMp+EyOivTtfnU5HCN8cAAAAAAADge7g4BgAAAAAAAN/DxTEAAAAAAAD4Hi6OAQAAAAAAwPcQyAVdklergwdcMg8woDLdsE95IiTJCPOhzDS+3vIq/fzpPOTAq9MBSOqG5PJm6ERENSJwqNkIZhCBDlb4Vqh4m1oWzBSBQw1GsJgI0grEGje+F8EHVpCWuhm9EZhm3WherUaEUJB4DZ2VqzNCLhJFoIb8WZMRhGEFtLXKIAodFOKl8uAJuc8QEZH4mXjx8arENYjwr+SOAy2SvihTy5KNzyeJbXJtIf381XxdgfQ0vZ5Gvv+rfYbsYBBVI/brQHZmh+txLcacAgAAXYZ1LhaQx6yQEdYqwqXkMZ5In2cFKnVol5OhXdk6EIvEsUcFvBIRtfHzhUButiqRQaihGr09wRx97PMSRchsoxH6Ko6HXqI+pwhvE8f0nCxVEyXORayAWxIBol6VPp+Sga5U3XHg7g/BN8cAAAAAAADge7g4BgAAAAAAAN/DxTEAAAAAAAD4HnqOoUty1s29t5WzoZecrEq8JtGvmWL0z4ZdhzXyBumyT5mIVP+o1StMMaLH1+r5lf0xFVWqJpBhPL9Yl2f0/DrRs2LeWF30szp5A3si8hJ4z4gXMvpJRc8IGTUUEH2xVg9uZxRt/NxE/4tn9E/L91K+j0RGX5Po7yYiCot9IiD7hYjIixU9v41GD7r8mTTr/ma9Xv3aw1XGPiJ7g0XfPhGR50SPUJSxz4qeLmc9l+zBtvrkxWt1CXG6Rr62OqOXGgAAugwrIyZcy3NDvASj7zWen1O6cp1ZE5DH+YDxHaTsFbb6Z+W5WLxxfJKPEf3FRPq8I8o4N6BGndEhj4delHG5KM9NwxH0+Fp5IGLd1rny1sPz2DgUp/ukM77k71niKp3FEyl8cwwAAAAAAAC+h4tjAAAAAAAA8D1cHAMAAAAAAIDv4eIYAAAAAAAAfM9zzrqzNAAAAAAAAIB/4JtjAAAAAAAA8D1cHAMAAAAAAIDv4eIYAAAAAAAAfA8XxwAAAAAAAOB7uDgGAAAAAAAA38PFMQAAAAAAAPgeLo4BAAAAAADA93BxDAAAAAAAAL6Hi2MAAAAAAADwPVwcAwAAAAAAgO/h4hgAAAAAAAB8DxfHAAAAAAAA4Hu4OAYAAAAAAADfw8UxAAAAAAAA+B4ujgEAAAAAAMD3uvzF8eeff04nn3wy9e/fnxISEigrK4smTpxIL730EqtbsmQJXXDBBTR27FiKjo4mz/N+cJ1z5syhk08+mfr06UOe59GZZ55p1i1YsIDOPvtsGjRoECUkJFD//v3p3HPPpaKiIlbX0NBAd999N02ePJny8/MpOTmZRo8eTXPmzKFQKPSj3wPoPLA/QmcSyf4YDofp4YcfpilTplDv3r0pMTGRRowYQddeey01NTWpdXqeZ/534403srqrr77arIuLizO39Z///CcNHTqU4uLiqLCwkGbPnr1r3wzY47A/Qmd33XXXked5NGLECPVv77//Ph144IGUkJBAeXl5NGvWLKqrq2M1kZ4DfOepp56i/fbbj9LS0igzM5MOOuggeuWVV8ztmjJlCuXm5pLneXT11VfvktcLnRv2xz0jak9vwI+1YcMGqq2tpTPOOIN69OhBDQ0N9Oyzz9KUKVPo3nvvpfPOO4+IiF599VV64IEHaO+996b+/fvT6tWrf3Cdf//736m2tpbGjx+vLiy+74orrqCKigo6+eSTqbCwkNauXUt33XUXvfzyy7RixQrKy8sjIqK1a9fSRRddRJMmTaJLL72UUlJS6PXXX6cLLriAPvzwQ3rkkUd27ZsCewz2R+hMItkfGxoa6KyzzqL99tuPZsyYQTk5OfTBBx/QVVddRQsWLKC33npL/fLm8MMPp9NPP50tGz16tLkNc+bMoaSkpPZxMBhUNffeey/NmDGDfvGLX9Cll15KCxcupFmzZlFDQwNdccUVu+CdgM4A+yN0Zps3b6brr7+eEhMT1b+tWLGCJk2aREOHDqVbb72VNm/eTDfffDOtWbOG/vvf/7bXRXoOQEQ0e/ZsmjVrFh1zzDF04403UlNTEz388MN07LHH0rPPPksnnnhie+2f//xnysvLo9GjR9Prr7++e98I6BSwP+5Brhtqa2tzI0eOdIMHD25fVlxc7BoaGpxzzs2cOdNt76WvX7/ehcNh55xziYmJ7owzzjDr3n33XRcKhdQyInJXXnll+7LS0lK3cuVK9fizzjrLEZFbs2ZNxK8Nuh7sj9CZyP2xubnZLVq0SNVdc801jojc/Pnz2XIicjNnzuzwea666ipHRK60tHS7dQ0NDS4zM9Mdc8wxbPmpp57qEhMTXUVFRYfPBV0X9kfoLKZNm+YOPfRQd9BBB7nhw4ezfzvqqKNcfn6+q66ubl92//33OyJyr7/++nbXa50DOOdcYWGh22effdqP7845V11d7ZKSktyUKVNY7bp165xz3x6/ichdddVVO/EKoSvB/rjndPk/q7YEg0Hq3bs3VVVVtS/Lzc2l+Pj4iB5fUFCw3T9z/c7EiRMpEAioZRkZGbRq1ar2ZVlZWTR8+HD1+BNOOIGIiNVC94P9EToTuT/GxMTQhAkTVF1H+0NjY6P5Z66Sc45qamrIOWf++9tvv03l5eV0wQUXsOUzZ86k+vp680+6oPvA/gidwXvvvUfPPPMM3X777erfampqaP78+TR9+nRKSUlpX3766adTUlISPfXUU9tdt3UO8N16c3Jy2PE9JSWFkpKS1PlB3759d/g1QdeF/XHP6jYXx/X19VRWVkbffPMN3XbbbfTf//6XJk2a9JNvR11dHdXV1VFWVlaHtcXFxUREEdVC14L9ETqTndkft7c/PPzww5SYmEjx8fE0bNgwevzxx39wPf3796fU1FRKTk6m6dOnU0lJCfv35cuXExHRuHHj2PKxY8dSIBBo/3foPrA/QmcSCoXooosuonPPPZf22msv9e+fffYZtbW1qX0iJiaGRo0aZe4TkezjBx98ML322ms0e/ZsWr9+PX355Zc0c+ZMqq6uposvvnjXvkjoMrA/7nldvuf4O5dddhnde++9REQUCAToxBNPpLvuuusn347bb7+dWlpaaNq0aduta2lpodtvv5369etH++yzz0+0dfBTwf4IncnO7I833XQTpaSk0FFHHcWWT5gwgaZOnUr9+vWjrVu30t13302nnnoqVVdX0/nnn99el56eThdeeCHtv//+FBsbSwsXLqS7776blixZQkuXLm3/jXdRUREFg0HKyclhzxMTE0OZmZm0devWXfEWQCeC/RE6k7lz59KGDRvozTffNP/9u6yP/Px89W/5+fm0cOFCtTySffzOO++ksrIymjVrFs2aNYuIvv3lz4IFC2j//ff/Ua8Jui7sj3tet7k4vuSSS+ikk06irVu30lNPPUWhUIhaWlp+0m1477336JprrqGpU6fSoYceut3aCy+8kL744gt65ZVXKCqq2/wY4P+H/RE6kx3dH6+//np688036Z577qG0tDT2b4sWLWLjs88+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UXZ2NsXFxVFhYSFdcsklVFpaqtYZyf5IRLRkyRK64IILaOzYsRQdHU2e5/3gdpaUlNBZZ51FOTk5FB8fT2PGjKGnn35617wJ0Klgn+wcovb0Buxqmzdvpuuvv54SExPVv02fPp2efvppOvvss2ncuHH04Ycf0l/+8hfauHEj3Xfffaz2zDPPpGeeeYYuueQSKiwspIcffpiOPvpoevvtt+nAAw9sr7v88svp1ltvpenTp9MFF1xAVVVVdO+999JBBx1EixYtovHjx+/wOqH7wP4IncGsWbNon332YcsGDhzY/v+PP/44/fvf/6YxY8ZQjx49fnA9mzZtov3335+CwSBdfvnllJiYSA899BBNnjyZFixYQBMnTiQiooaGBjrrrLNov/32oxkzZlBOTg598MEHdNVVV9GCBQvorbfeaj/wNjY20ueff05HH3009e3blwKBAL3//vv029/+lhYvXkyPP/74bnhHYE/C/gidSUf747Jly2jUqFF0yimnUHJyMq1atYruv/9+euWVV2jFihXtx/dI90cioldffZUeeOAB2nvvval///60evVqc9tqamrowAMPpJKSErr44ospLy+PnnrqKZo6dSrNmzePfvWrX+2GdwT2NOyTe5jrZqZNm+YOPfRQd9BBB7nhw4e3L1+yZIkjIveXv/yF1V922WXO8zz3ySeftC9bvHixIyL3j3/8o31ZY2OjGzBggNt///3bl7W2trr4+Hh30kknsXWuXbvWEZGbNWvWDq8Tuhfsj7Anvf32246I3NNPP73dui1btriWlhbnnHPHHHOMKygoMOsuuOACFxUV5b788sv2ZfX19a53795uzJgx7cuam5vdokWL1OOvueYaR0Ru/vz5HW77hRde6IjIFRUVdVgLXQP2R+hMIt0fLc8884wjIvfEE0+0L4t0f3TOueLiYtfQ0OCcc27mzJnuh07Hb7rpJkdEbsGCBe3LQqGQ22effVxeXp5rbm7e4W2Hzgv7ZOfQrf6s+r333qNnnnmGbr/9dvVvCxcuJCKiU045hS0/5ZRTyDlH//73v9uXPfPMMxQMBum8885rXxYXF0fnnHMOffDBB7Rp0yYi+vbPYhsbGyk3N5etMycnhwKBAMXHx+/wOqH7wP4InUltba35J/tERD169KDo6OgO17Fw4UIaPXo0DR48uH1ZQkICTZkyhT7++GNa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",
      "text/plain": [
       "<Figure size 1000x1000 with 36 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot the first 36 examples\n",
    "num_imgs = 36\n",
    "num_row = num_col = 6\n",
    "aug_batch_x, aug_batch_y = aug_sampler[0]\n",
    "# Sort the class ids so we can see the original\n",
    "# and augmented versions as pairs.\n",
    "sorted_idx = tf.argsort(aug_batch_y)\n",
    "plt.figure(figsize=(10, 10))\n",
    "for i in range(num_imgs):\n",
    "    idx = sorted_idx[i]\n",
    "    ax = plt.subplot(num_row, num_col, i + 1)\n",
    "    plt.imshow(aug_batch_x[idx])\n",
    "    plt.title(int(aug_batch_y[idx]))\n",
    "    plt.axis(\"off\")\n",
    "\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a196870",
   "metadata": {},
   "source": [
    "## Sampler Sizes\n",
    "\n",
    "`SingleShotMemorySampler()` provides various attributes for accessing info about the data:\n",
    "* `__len__` provides the number of steps per epoch. \n",
    "* `num_examples` provides the number of examples within the sampler.\n",
    "* `example_shape` provides the shape of the examples.\n",
    "\n",
    "The `num_examples` attribute represents the unaugmented examples within the sampler."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "425911a3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The sampler contains 1000 steps per epoch.\n",
      "The sampler is using 60000 examples out of the original 60000.\n",
      "Each examples has the following shape: (28, 28).\n"
     ]
    }
   ],
   "source": [
    "print(f\"The sampler contains {len(aug_sampler)} steps per epoch.\")\n",
    "print(f\"The sampler is using {aug_sampler.num_examples} examples out of the original {len(aug_x)}.\")\n",
    "print(f\"Each examples has the following shape: {aug_sampler.example_shape}.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b922faff",
   "metadata": {},
   "source": [
    "## Accessing the Examples\n",
    "\n",
    "Additionaly, the `SingleShotMemorySampler()` provides `get_slice()` for manually accessing examples within the Sampler.\n",
    "\n",
    "The method returns slice size plus the augmented examples returned by the augmenter function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "bff894f9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "########## X ##########\n",
      "tf.Tensor(\n",
      "[[-0.02762966  0.0002732  -0.02580848 ... -0.00132397  0.02656987\n",
      "  -0.0329301 ]\n",
      " [ 0.          0.          0.         ...  0.          0.\n",
      "   0.        ]\n",
      " [ 0.          0.          0.         ...  0.          0.\n",
      "   0.        ]\n",
      " ...\n",
      " [ 0.          0.          0.         ...  0.02359158  0.00657404\n",
      "   0.00964166]\n",
      " [ 0.          0.          0.         ...  0.          0.\n",
      "   0.        ]\n",
      " [ 0.00117456 -0.01771195 -0.00253602 ...  0.          0.\n",
      "   0.        ]], shape=(10, 1568), dtype=float32)\n",
      "\n",
      "########## y ##########\n",
      "tf.Tensor(\n",
      "[203 208 209 202 200 203 200 207 204 206 204 209 201 205 206 201 205 207\n",
      " 202 208], shape=(20,), dtype=int32)\n"
     ]
    }
   ],
   "source": [
    "# Get 10 examples starting at example 200.\n",
    "X_aug_slice, y_aug_slice = aug_sampler.get_slice(begin=200, size=10)\n",
    "print(\"#\" * 10 + \" X \" + \"#\" * 10)\n",
    "print(tf.reshape(X_aug_slice, (10, -1)))\n",
    "print(\"\\n\" + \"#\" * 10 + \" y \" + \"#\" * 10)\n",
    "print(y_aug_slice)\n",
    "\n",
    "# Check that the batch size is double our get_slice size (original examples + augmented examples).\n",
    "assert tf.shape(X_aug_slice)[0] == 10 + 10\n",
    "# Check that the number of columns matches the number of expected features.\n",
    "assert tf.shape(X_aug_slice)[1] == (28)\n",
    "# Check that the number of columns matches the number of expected features.\n",
    "assert tf.shape(X_aug_slice)[2] == (28)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "959bf1e9",
   "metadata": {},
   "source": [
    "<hr>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1d87627e",
   "metadata": {},
   "source": [
    "# TFDatasetMultiShotMemorySampler: Load data from TF Dataset\n",
    "The following cell loads data directly from the TensorFlow catalog using TensorFlow similarity\n",
    "`TFDatasetMultiShotMemorySampler()`. \n",
    "\n",
    "Using a sampler is required to ensure that each batch contains at least N samples of each class incuded in a batch. Otherwise the contrastive loss does not work properly as it can't compute positive distances."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "b5f849e3",
   "metadata": {},
   "outputs": [],
   "source": [
    "IMG_SIZE = 300  # @param {type:\"integer\"}\n",
    "\n",
    "# preprocessing function that resizes images to ensure all images are the same shape\n",
    "def resize(img, label):\n",
    "    with tf.device(\"/cpu:0\"):\n",
    "        img = tf.cast(img, dtype=\"int32\")\n",
    "        img = tf.image.resize_with_pad(img, IMG_SIZE, IMG_SIZE)\n",
    "        return img, label"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "25857539",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Class IDs seen during training [22, 20, 7, 11, 2, 0, 16, 13, 32, 35, 34, 17, 10, 18, 8, 5]\n",
      "\n",
      "########## Train Sampler ##########\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "21e852cf8c834b659f773ce97b782068",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "converting train:   0%|          | 0/3680 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Corrupt JPEG data: 240 extraneous bytes before marker 0xd9\n",
      "Corrupt JPEG data: premature end of data segment\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d6244423d0e84b65a5b6b006b144bf28",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Preprocessing data:   0%|          | 0/3680 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "The initial batch size is 64 (16 classes * 4 examples per class) with 0 augmentations\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6a70b4a80e854ebc82f710d638bc753c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "filtering examples:   0%|          | 0/3680 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cb5e6b991aad486c80cf2d9ccde510c3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "selecting classes:   0%|          | 0/16 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8e29ff72bf644904921571f5b4713e17",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "gather examples:   0%|          | 0/1584 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3b77aaeb0bdd49489f4d090a58784196",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "indexing classes:   0%|          | 0/1584 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "########## Test Sampler ##########\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5a1d1b4dec314a628ffde16f712129fe",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "converting test:   0%|          | 0/3669 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ad36bdd06f8247dda517393ffbf68687",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Preprocessing data:   0%|          | 0/3669 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "The initial batch size is 32 (16 classes * 2 examples per class) with 0 augmentations\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "651992237fc24f9381c7a555f9f55515",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "filtering examples:   0%|          | 0/3669 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e709c652e75b47ef97f3c1d328704211",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "selecting classes:   0%|          | 0/37 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "553947761ecd4f0da01028465753dce9",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "gather examples:   0%|          | 0/740 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cbcbe5dbde034037ab909fa162a20961",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "indexing classes:   0%|          | 0/740 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "training_classes = 16  # @param {type:\"slider\", min:1, max:37}\n",
    "tfds_examples_per_class_per_batch = 4  # @param {type:\"integer\"}\n",
    "tfds_class_list = random.sample(range(37), k=training_classes)\n",
    "tfds_classes_per_batch = max(16, training_classes)\n",
    "\n",
    "print(f\"Class IDs seen during training {tfds_class_list}\\n\")\n",
    "\n",
    "# use the train split for training\n",
    "print(\"#\" * 10 + \" Train Sampler \" + \"#\" * 10)\n",
    "train_ds = tfsim.samplers.TFDatasetMultiShotMemorySampler(\n",
    "    \"oxford_iiit_pet\",\n",
    "    splits=\"train\",\n",
    "    examples_per_class_per_batch=tfds_examples_per_class_per_batch,\n",
    "    classes_per_batch=tfds_classes_per_batch,\n",
    "    preprocess_fn=resize,\n",
    "    class_list=tfds_class_list,\n",
    ")  # We filter train data to only keep the train classes.\n",
    "\n",
    "# use the test split for indexing and querying\n",
    "print(\"\\n\" + \"#\" * 10 + \" Test Sampler \" + \"#\" * 10)\n",
    "test_ds = tfsim.samplers.TFDatasetMultiShotMemorySampler(\n",
    "    \"oxford_iiit_pet\",\n",
    "    splits=\"test\",\n",
    "    total_examples_per_class=20,\n",
    "    classes_per_batch=tfds_classes_per_batch,\n",
    "    preprocess_fn=resize,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "229258e1",
   "metadata": {},
   "source": [
    "## Generating Batches\n",
    "The Tensorflow Similarity memory samplers are a subclass of [tf.keras.utils.Sequence](https://www.tensorflow.org/api_docs/python/tf/keras/utils/Sequence), overriding the `__getitem__` and `__len__` methods. \n",
    "\n",
    "Additionally, Tensorflow Similarity provides a `generate_batch()` method that takes a batch ID and yields a single batch. \n",
    "\n",
    "We verify that the batch batch only conatins the classes defined in `CLASS_LIST` and that each class has `tfds_classes_per_batch` * `tfds_examples_per_class_per_batch` examples. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "dab4869e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "########## X ##########\n",
      "Actual Tensor Shape (64, 300, 300, 3)\n",
      "tf.Tensor(\n",
      "[[0. 0. 0. ... 0. 0. 0.]\n",
      " [0. 0. 0. ... 0. 0. 0.]\n",
      " [0. 0. 0. ... 0. 0. 0.]\n",
      " ...\n",
      " [0. 0. 0. ... 0. 0. 0.]\n",
      " [0. 0. 0. ... 0. 0. 0.]\n",
      " [0. 0. 0. ... 0. 0. 0.]], shape=(64, 270000), dtype=float32)\n",
      "\n",
      "########## y ##########\n",
      "tf.Tensor(\n",
      "[35 35 35 35 16 16 16 16  2  2  2  2 10 10 10 10 32 32 32 32 13 13 13 13\n",
      " 17 17 17 17 18 18 18 18 34 34 34 34  8  8  8  8  0  0  0  0 11 11 11 11\n",
      " 20 20 20 20 22 22 22 22  7  7  7  7  5  5  5  5], shape=(64,), dtype=int64)\n"
     ]
    }
   ],
   "source": [
    "X_tfds_batch, y_tfds_batch = train_ds.generate_batch(100)\n",
    "print(\"#\" * 10 + \" X \" + \"#\" * 10)\n",
    "print(f\"Actual Tensor Shape {X_tfds_batch.shape}\")\n",
    "print(tf.reshape(X_tfds_batch, (len(X_tfds_batch), -1)))\n",
    "print(\"\\n\" + \"#\" * 10 + \" y \" + \"#\" * 10)\n",
    "print(y_tfds_batch)\n",
    "\n",
    "# Check that the batch size is equal to the target number of classes * target number of examples per class.\n",
    "assert tf.shape(X_tfds_batch)[0] == (tfds_classes_per_batch * tfds_examples_per_class_per_batch)\n",
    "# Check that the number of columns matches the number of expected features.\n",
    "assert tf.shape(X_tfds_batch)[1] == (300)\n",
    "# Check that the number of columns matches the number of expected features.\n",
    "assert tf.shape(X_tfds_batch)[2] == (300)\n",
    "# Check that the number of columns matches the number of expected features.\n",
    "assert tf.shape(X_tfds_batch)[3] == (3)\n",
    "# Check that classes in the batch are from the allowed set in CLASS_LIST\n",
    "assert set(tf.unique(y_tfds_batch)[0].numpy()) - set(tfds_class_list) == set()\n",
    "# Check that we only have NUM_CLASSES_PER_BATCH\n",
    "assert len(tf.unique(y_tfds_batch)[0]) == tfds_classes_per_batch"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a0b343de",
   "metadata": {},
   "source": [
    "## Sampler Sizes\n",
    "\n",
    "`TFDatasetMultiShotMemorySampler()` provides various attributes for accessing info about the data:\n",
    "* `__len__` provides the number of steps per epoch. \n",
    "* `num_examples` provides the number of examples within the sampler.\n",
    "* `example_shape` provides the shape of the examples."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "8d0314c5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The Train sampler contains 1000 steps per epoch.\n",
      "The Train sampler is using 1584 examples.\n",
      "Each examples has the following shape: (300, 300, 3).\n"
     ]
    }
   ],
   "source": [
    "print(f\"The Train sampler contains {len(train_ds)} steps per epoch.\")\n",
    "print(f\"The Train sampler is using {train_ds.num_examples} examples.\")\n",
    "print(f\"Each examples has the following shape: {train_ds.example_shape}.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "d4a57ce5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The Test sampler contains 1000 steps per epoch.\n",
      "The Test sampler is using 740 examples.\n",
      "Each examples has the following shape: (300, 300, 3).\n"
     ]
    }
   ],
   "source": [
    "print(f\"The Test sampler contains {len(test_ds)} steps per epoch.\")\n",
    "print(f\"The Test sampler is using {test_ds.num_examples} examples.\")\n",
    "print(f\"Each examples has the following shape: {test_ds.example_shape}.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4c495157",
   "metadata": {},
   "source": [
    "## Accessing the Examples\n",
    "\n",
    "Additionaly, the `SingleShotMemorySampler()` provides `get_slice()` for manually accessing examples within the Sampler.\n",
    "\n",
    "The method returns slice size plus the augmented examples returned by the augmenter function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "0e1329c0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "########## X ##########\n",
      "Actual Tensor Shape (10, 300, 300, 3)\n",
      "tf.Tensor(\n",
      "[[0. 0. 0. ... 0. 0. 0.]\n",
      " [0. 0. 0. ... 0. 0. 0.]\n",
      " [0. 0. 0. ... 0. 0. 0.]\n",
      " ...\n",
      " [0. 0. 0. ... 0. 0. 0.]\n",
      " [0. 0. 0. ... 0. 0. 0.]\n",
      " [0. 0. 0. ... 0. 0. 0.]], shape=(10, 270000), dtype=float32)\n",
      "\n",
      "########## y ##########\n",
      "tf.Tensor([16 20 13 22 11 32 10 16  5 22], shape=(10,), dtype=int64)\n"
     ]
    }
   ],
   "source": [
    "# Get 10 examples starting at example 200.\n",
    "X_tfds_slice, y_tfds_slice = train_ds.get_slice(begin=200, size=10)\n",
    "print(\"#\" * 10 + \" X \" + \"#\" * 10)\n",
    "print(f\"Actual Tensor Shape {X_tfds_slice.shape}\")\n",
    "print(tf.reshape(X_tfds_slice, (len(X_tfds_slice), -1)))\n",
    "print(\"\\n\" + \"#\" * 10 + \" y \" + \"#\" * 10)\n",
    "print(y_tfds_slice)\n",
    "\n",
    "# Check that the batch size.\n",
    "assert tf.shape(X_tfds_slice)[0] == 10\n",
    "# Check that the number of columns matches the number of expected features.\n",
    "assert tf.shape(X_tfds_slice)[1] == (300)\n",
    "# Check that the number of columns matches the number of expected features.\n",
    "assert tf.shape(X_tfds_slice)[2] == (300)\n",
    "# Check that the number of columns matches the number of expected features.\n",
    "assert tf.shape(X_tfds_slice)[3] == (3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "97f393eb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "########## X ##########\n",
      "Actual Tensor Shape (10, 300, 300, 3)\n",
      "tf.Tensor(\n",
      "[[0. 0. 0. ... 0. 0. 0.]\n",
      " [0. 0. 0. ... 0. 0. 0.]\n",
      " [0. 0. 0. ... 0. 0. 0.]\n",
      " ...\n",
      " [0. 0. 0. ... 0. 0. 0.]\n",
      " [0. 0. 0. ... 0. 0. 0.]\n",
      " [0. 0. 0. ... 0. 0. 0.]], shape=(10, 270000), dtype=float32)\n",
      "\n",
      "########## y ##########\n",
      "tf.Tensor([35 28  0  9  5 22 15 36 36 32], shape=(10,), dtype=int64)\n"
     ]
    }
   ],
   "source": [
    "# Get 10 examples starting at example 200.\n",
    "X_tfds_slice, y_tfds_slice = test_ds.get_slice(begin=200, size=10)\n",
    "print(\"#\" * 10 + \" X \" + \"#\" * 10)\n",
    "print(f\"Actual Tensor Shape {X_tfds_slice.shape}\")\n",
    "print(tf.reshape(X_tfds_slice, (len(X_tfds_slice), -1)))\n",
    "print(\"\\n\" + \"#\" * 10 + \" y \" + \"#\" * 10)\n",
    "print(y_tfds_slice)\n",
    "\n",
    "# Check that the batch size.\n",
    "assert tf.shape(X_tfds_slice)[0] == 10\n",
    "# Check that the number of columns matches the number of expected features.\n",
    "assert tf.shape(X_tfds_slice)[1] == (300)\n",
    "# Check that the number of columns matches the number of expected features.\n",
    "assert tf.shape(X_tfds_slice)[2] == (300)\n",
    "# Check that the number of columns matches the number of expected features.\n",
    "assert tf.shape(X_tfds_slice)[3] == (3)"
   ]
  }
 ],
 "metadata": {
  "environment": {
   "kernel": "python3",
   "name": "tf2-gpu.2-8.m91",
   "type": "gcloud",
   "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-8:m91"
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  },
  "vscode": {
   "interpreter": {
    "hash": "c7b3389fe492617a9dd862ce9e69c0dfb3e62254a4be8ff5561f4f9b5c78139c"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
